以类方法作为参数的 C++ 模板

标签 c++ templates

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

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();
     ^

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

最佳答案

这不是您引用指向成员的指针的方式。您需要先取消引用它:

(x->*TFun)();

我用括号来处理运算符优先级问题。 TFun 在被调用之前将被取消引用。

关于以类方法作为参数的 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25107492/

相关文章:

java - JSP模板实现(Composite View Pattern)

c++ - 使用 C++ 实现 BFS

c++ - 这两种初始化成员变量的方法有区别吗?

php - 全局访问模板中的用户对象

c++ - 为什么只能在头文件中实现模板?

c++ - 是否可以使用 SFINAE/模板来检查运算符是否存在?

c++ - 如何遍历通过引用传递的多个对象?

c++ - cppcheck 如何抑制内联不匹配抑制?

C++ 发送和接收 TCP/IP 结构

c++ - 强制评估 constexpr 静态成员