小编sup*_*per的帖子

从类模板生成 lambda

我有一个注册回调函数并稍后调用它们的类,看起来像这样。

template<typename ReturnType, typename... Args>
class Signal {
    std::vector<std::function<ReturnType(Args...)>> function;
public:
    template<typename... Args2>
    ReturnType operator()(Args2&&... args2) {
        ReturnType ret;
        for (auto& func : function)
            ret = func(std::forward<Args2>(args2)...);
        return ret;
    }

    template<typename Func>
    void func(Func const &func) {
        function.push_back(std::function<ReturnType(Args...)>(func));
    }

    template<typename Class, typename Instance>
    void mfunc(ReturnType(Class::*func)(Args...), Instance &instance) {
        mfunc2(func, instance, make_int_sequence<sizeof...(Args)>{});
    }
    template<typename Class, typename Instance, int... I>
    void mfunc2(ReturnType(Class::*func)(Args...), Instance &instance, int_sequence<I...>) {
        using namespace std::placeholders;
        function.push_back(std::function<ReturnType(Args...)>(std::bind(func, &instance, placeholder_template<I>{}...)));
    }
};

#include <iostream>

class foo {
public:
    int bar(int …
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
106
查看次数

标签 统计

c++ ×1