2013-05-17 4 views
0

나는 다음을 수행하려고 :는 수 std 인수 매개 변수로 템플릿 클래스를 통과 :: 바인드

template <typename T, template<typename> class G> 
class Chain 
{ 
//....................some irrelevant code............... 
std::function<void (Node<T, G>&)> method_ptr; 

template<typename M> 
void SetMethodPointer(M* m, void(M::*ptr)(Node<T, G>&)) 
{ 
     method_ptr(std::bind(ptr, m, std::placeholders::_1)); 
} 

G<T> 

일부 템플릿 클래스입니다

Node<T, G> 

은 G를 템플릿 매개 변수로 사용하는 또 다른 템플릿 클래스입니다. 이 템플릿 디자인 자체는 괜찮습니다. 간단한 함수 포인터를 사용하는 한 문제가 없습니다. 그러나 이번에는 Chain 템플릿 클래스 내에서 다른 클래스 메서드에 대한 포인터를 가져와야했습니다. 이 성병 :: bind 함수를 인수 매개 변수로 템플릿 클래스 노드를 전달하는 몇 가지 문제에 관련되어,

error C2664: 'void std::tr1::_Function_impl1<_Ret,_Arg0>::operator()(_Arg0) const' : cannot convert parameter 1 from 'std::tr1::_Bind<_Result_type,_Ret,_BindN>' to 'Node<T,G> '. 

내 질문 :

지금 (2010 VS) 컴파일러는 다음과 같은 오류 상태? 어느 쪽이든 가능하면이 오류를 어떻게 해결할 수 있습니까?

감사합니다.

+2

하는 방법 (http://sscce.org) (이름 SetMethodPointer에서 추측)

은 당신이하고 싶은 아마? –

+0

'method_ptr = std :: bind (ptr, m, std :: placeholders :: _ 1);' – stardust

+0

'method_ptr = std :: bind (...);' 'method_ptr'. – Xeo

답변

2
method_ptr(std::bind(ptr, m, std::placeholders::_1)); 

인수로서의 기능을 허용 method_ptr라는 함수를 호출한다. 그러나 method_ptrNode<T, G>&을 수락한다고 선언됩니다. 이 멋진 [SSCCE]에 대한

method_ptr = std::bind(ptr, m, std::placeholders::_1); 
관련 문제