我正在尝试编写一个接受成员函数指针作为参数的模板化方法。
这是一个示例类,包括我最近尝试编写所述模板方法:
class MyClass
{
public:
int myMethod() { return 1; }
template<typename T>
T call(std::function<T(MyClass*)> m)
{
return m(this);
}
};
我的目标是能够执行以下操作(或语法上非常相似的操作):
MyClass m;
auto result = m.call(&MyClass::myMethod);
到目前为止,通过我上面的尝试,我可以做到:
MyClass m;
std::function<int(MyClass*)> f = &MyClass::myMethod;
auto result = m.call(f);
令我惊讶的是,我什至无法将其包装成一行。 m.call(&MyClass::myMethod)
这不会编译。为什么?
我确信有一种方法可以获得我想要的行为,因此非常感谢任何帮助!
最佳答案
显然它不能推导出 T
(来自非常推导的 ctor 参数的模板参数)。
如果您的目标只是在一次调用中完成,您可以将方法定义更改为类似
template<class F> auto call(F &&f) {
return std::invoke(std::forward<F>(f), this);
}
关于c++ - 将成员函数指针作为参数传递给模板方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62761204/