C++函数指针返回类型

标签 c++ function templates callback function-pointers

给出的是以下类(只是标题):

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/

相关文章:

c++ - 函数调用中的堆和删除。如何删除本地动态内存?

c++ - 为模板类重载运算符时的隐式转换

c++ - 需要关于在我的项目中共享恒定值的建议

c++ - 无法从 Windows 注册表中查询值

php - 如何在 woocommerce 单个订单页面中自动添加备注

python - 在不执行的情况下将函数保存在元组中

c++ - 用于 boost 多索引容器的模板参数

c++ - `std::nullptr_t` 模板参数的正确用例是什么?

c++ - 将值插入二维 vector 然后遍历它

c++ - typedef 函数不是类型名?