gpt4 book ai didi

c++ - 将成员函数指针作为参数传递给模板方法

转载 作者:行者123 更新时间:2023-12-01 14:13:12 26 4
gpt4 key购买 nike

我正在尝试编写一个接受成员函数指针作为参数的模板化方法。

这是一个示例类,包括我最近尝试编写所述模板方法:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com