use*_*903 5 c++ templates function-pointers function callback
给定的是以下类(只是标题):
class Example {
public:
template<class C>
Example(bool(C::*callbackFunc)(Foo&) = nullptr) : callbackFunc(callbackFunc);
template<class C>
??? getCallbackFunc() const {
return callbackFunc;
}
private:
// store the func ptr
template<class C>
bool (C::*callbackFunc)(Foo&);
};
Run Code Online (Sandbox Code Playgroud)
getter 的正确返回类型是getCallbackFunc()什么?
你的问题的答案是:
bool(C::*)(Foo&)
Run Code Online (Sandbox Code Playgroud)
但是,这对您没有多大帮助,因为您不能在类实例中存储模板变量:
template<class C>
bool (C::*callbackFunc)(Foo&);
Run Code Online (Sandbox Code Playgroud)
这不是一个合法的变量声明,你真的无法修复它。
替换callbackFunc为
std::function< bool(void*, Foo&) > callbackFunc;
Run Code Online (Sandbox Code Playgroud)
然后在Examplector中编写一个函数,将成员ptr转换成这样的函数。它涉及从void*到的静态转换C*。
获取回调函数返回:
std::function< bool(C*, Foo&) >
Run Code Online (Sandbox Code Playgroud)
这是隐式转换为 from callbackFunc。
您可以通过传入C*和Foo&.