her*_*ian 1 c++ templates class
嗨,我尝试在vc ++中构建一个tamplate函数,如下所示:
template<class _Fn0,class _Fn1> void for_each(_Fn0 _Func0,_Fn1 _Func1)
{
_Func0(12);
_Func1(12);
}
Run Code Online (Sandbox Code Playgroud)
当我使用_Func0/1这个全局函数时,这项工作正在顺利进行.
void aglobal(int a)
{
a++;
}
for_each(aglobal,aglobal);
Run Code Online (Sandbox Code Playgroud)
但是当我使用memeber类函数时,我收到错误消息.
class A
{
public:
void aa(int a)
{
a++;
}
void bb(int b)
{
b++;
}
void cc()
{
for_each(&A::aa,&A::bb);
}
};
Run Code Online (Sandbox Code Playgroud)
错误C2064:term不计算为带1个参数的函数1>请参阅正在编译的函数模板实例化'void for_each(_Fn0,_Fn1)'的引用.
我该如何解决这个错误?
谢谢herzl.
A::aa并且A::bb是非静态成员函数; 你试图把它们称为非成员函数.
只能在对象的实例上调用非静态成员函数.
要解决它,你可以
制作aa和bb静电,或
传递的一个实例A为for_each以使得它可以调用该实例上的功能,或
使用std::bind/ std::tr1::bind/ boost::bind将成员函数绑定到实例,然后再将其传递给函数模板,或者
编写一个函子,它存储一个指向A你想要调用成员函数的实例的指针和一个指向你想要调用的成员函数的指针; 这实际上是什么bind(虽然bind更通用).