给定以下类(仅 header ):

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&);
};

getter getCallbackFunc()的正确返回类型是什么?

最佳答案

您的问题的答案是:

bool(C::*)(Foo&)

但是,这将无济于事,因为您无法在类实例中存储模板变量:
template<class C>
bool (C::*callbackFunc)(Foo&);

那不是合法的变量声明,您真的不能解决它。

callbackFunc替换为
std::function< bool(void*, Foo&) > callbackFunc;

然后在Example ctor中编写一个函数,将成员ptr转换为这样的函数。它涉及从void*C*的静态转换。

获取回调函数返回:
std::function< bool(C*, Foo&) >

这可以从callbackFunc隐式转换为。

您可以通过传入C*Foo&来使用它。

关于C++函数指针返回类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39550464/

10-11 04:54