2013-05-17 57 views
0

我努力做到以下几点:传递一个模板类作为参数arg到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作为模板参数的模板类。 请注意,这种模板设计本身是可以的,只要我使用简单的函数指针,我就没有问题;然而,这一次我需要一个指向链模板类中的另一个类方法的指针。

现在,编译器(VS 2010)陈述了以下错误:

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> '. 

我的问题,这是涉及到通过模板类节点作为参数arg到std :: bind函数的一些问题?无论哪种方式,如果可能,我如何纠正这个错误?

谢谢你们。

+2

怎么样一个不错的[SSCCE(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_ptr已宣布接受Node<T, G>&

你想要做什么可能是这个

method_ptr = std::bind(ptr, m, std::placeholders::_1); 
相关问题