将一个模板类作为arg参数传递给std::bind

passing a template class as arg parameter to std::bind

本文关键字:arg 参数传递 std bind 一个      更新时间:2023-10-16

我正在尝试执行以下操作:

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函数的问题有关?不管怎样,如果可能的话,我该如何纠正这个错误?

谢谢大家。

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

是对名为method_ptr的函数的调用,该函数接受函数作为自变量。然而,CCD_ 2被声明为接受CCD_ 3。

你想做的可能是这个(根据名称SetMethodPointer猜测(

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