C++ 函数指针返回类型

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()什么?

Yak*_*ont 5

你的问题的答案是:

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&.