如果我有类似
的话class MyClass
{
public:
void callMe()
{
cout << "called";
}
};
template< void (MyClass::*callFunc)() > struct A
{
void A_call()
{
callFunc();
}
};
int main(int argc, char *argv[])
{
struct A <&MyClass::callMe> object;
object.A_call();
}
这不会编译,因为它表示&#34; callFunc:term不会计算为采用0参数的函数&#34;。
不是类成员函数是编译时常量吗?
答案 0 :(得分:1)
您已将callFunc
定义为指向成员函数的指针。要取消引用它(调用成员函数),你需要提供指针本身和一个你将要调用其成员的对象,这是一般的:
template <void (MYClass::*callFunc)() > class A {
MyClass &c;
public:
A(MyClass &m) : c(m) {}
void A_call() { c.*callFunc(); }
};
int main() {
MyClass m;
A<&MyClass::callMe> object(m);
object.A_call();
};
答案 1 :(得分:0)
您在类callFunc()
之外调用方法MyClass
并且它不是静态的,那么您需要MyClass
的实例来调用它。
答案 2 :(得分:0)
MyClass::callMe
是一个非静态成员函数!没有MyClass的实例你就无法调用它!该实例作为第一个参数传递,因此MyClass::callMe
实际上是:
void callMe(MyClass * this)
如果没有MyClass的实例,显然无法调用...