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) 컴파일러는 다음과 같은 오류 상태? 어느 쪽이든 가능하면이 오류를 어떻게 해결할 수 있습니까?감사합니다.
하는 방법 (http://sscce.org) (이름 SetMethodPointer에서 추측)
은 당신이하고 싶은 아마? –
'method_ptr = std :: bind (ptr, m, std :: placeholders :: _ 1);' – stardust
'method_ptr = std :: bind (...);' 'method_ptr'. – Xeo