C++模板:使用类方法作为参数

4

是否可以将类方法作为参数传递给模板?例如:

template<typename T, void(T::*TFun)()>
void call(T* x) {
    x->TFun();
}

struct Y {
    void foo();
};

int main() {
    Y y;
    call<Y,&Y::foo>(&y);  // should be the equivalent of y.foo()
}

如果我尝试编译上述代码,会得到以下结果:
main.cpp: In instantiation of void call(T*) [with T = Y; void (T::* TFun)() = &Y::foo]:
main.cpp:12:23:   required from here
main.cpp:4:5: error: struct Y has no member named TFun
     x->TFun();
     ^

这是否可能?如果是,语法是什么?

1
这与模板无关。请尝试使用常规成员函数指针。 - chris
1
你可能会发现这个有用:https://dev59.com/i2w15IYBdhLWcg3weLsF,特别是接受答案中最后一行的语法。 - WhozCraig
@WhozCraig,谢谢你提供的链接,如果我之前找到它,就不用在这里问了 ;) - Jerry
1个回答

6

这不是你引用成员指针的方式。你需要先对其进行解引用:

(x->*TFun)();

我使用括号处理运算符优先级问题。TFun 将在被调用之前被解除引用。

谢谢。我以为我尝试过那个语法,但可能写错了或者出现了一些错误。不过现在已经编译成功了。 - Jerry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接