我的示例使用可变参数模板在类中注册函数。注册单个函数但是类成员函数呢?我尝试过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;
}
}
答案 0 :(得分:3)
创建一个带有所需签名的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需要与相应的对象,对象引用或指向相应类的对象的指针一起使用。如果TObject
是类似值,则成员函数调用语法将是(obj.*f)
。如果TObject
是指针式的,则语法为(obj->*f)
。)