我正在尝试执行以下操作:
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模板类中的另一个类方法。
现在编译器(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> '.
我的问题,这是否与将模板类Node作为arg参数传递给std :: bind函数的一些问题有关?无论哪种方式,如果可能的话,我如何纠正这个错误?
谢谢你们。
答案 0 :(得分:2)
method_ptr(std::bind(ptr, m, std::placeholders::_1));
是对一个名为method_ptr
的函数的调用,它接受一个函数作为参数。但是,method_ptr
被声明为接受Node<T, G>&
。
你想要做的就是这个(从名字 SetMethodPointer 中猜测)
method_ptr = std::bind(ptr, m, std::placeholders::_1);