C++ 绑定成员函数与可变参数模板

C++ bind member function with variadic template

我下面的示例使用可变参数模板在 class 中注册一个函数。注册单个函数可以,但是 class 成员函数呢?我试过 std::bind 但这需要占位符,这不是一个选项,因为我不知道参数的数量。在 C++11 中是否有一种简单的方法可以做到这一点,或者我是否被迫为每个参数数量实现寄存器函数?

template<typename TReturn, typename... TArgs>
class Func {
    std::function<TReturn (TArgs...)> fn;

    template<typename TFunction, typename TObject>
    bool register(TFunction f, TObject obj){

    }

    bool register(std::function<TReturn (TArgs...)> f){
        fn = f;
        return true;
    }   
}

创建具有所需签名的 lambda 函数并从中构建 std::function 对象。

template<typename TReturn, typename... TArgs>
class Func {
    std::function<TReturn (TArgs...)> fn;

    template<typename TFunction, typename TObject>
    bool Register(TFunction f, TObject obj){
        fn = [obj](TArgs... args){return (obj.*f)(args...);};
        return true;
    }

    bool Register(std::function<TReturn (TArgs...)> f){
        fn = f;
        return true;
    }   
}

(注意:Member function pointers需要与相应的对象,对象引用或指向适当[=21=的对象的指针一起使用。如果TObject是类值的,成员函数调用语法为 (obj.*f)。如果 TObject 类似于指针,则语法为 (obj->*f)。)