c++ - 将模板类作为 arg 参数传递给 std::bind

标签 c++ templates

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

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 的函数的调用它接受一个函数作为参数。然而method_ptr声明接受 Node<T, G>& .

你要做的大概是这个(从名字SetMethodPointer猜)

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

关于c++ - 将模板类作为 arg 参数传递给 std::bind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16608353/

相关文章:

c++ - 为模板类中的嵌套类专门化 std::hash

c++ - 如何在C++中正确导航目录路径

c++ - 如何在 C++ 代码中存储 id<MTLBuffer>?

c++ - 一个源代码需要在多台机器上进行不同的编译

c++ - 编译OpenBLAS C++项目给出错误 “Undefined symbols for architecture x86_64”

c++ - 容纳指向指针和非指针的模板

c++ - 我无法使用模板编译此代码

django - 在 Django 中关闭 autoescape 安全吗?

C++:在 Windows 中监视进程创建和终止

c++ - (函数)模板的 C++ 非类型参数是否有序?