我下面的示例使用可变参数模板在类中注册函数。注册单个函数是可行的,但是类成员函数呢?我尝试了std :: bind,但是这需要占位符,这不是一个选择,因为我不知道参数的数量。在C ++ 11中有没有一种简单的方法可以执行此操作,或者我是否必须为每个数量的参数实现register函数?
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;
}
}
(注意:成员函数指针需要与相应的对象,对象引用或指向适当类的对象的指针一起使用。如果TObject
值类似于,则成员函数调用语法为(obj.*f)
。如果TObject
指针类似于,则语法会是(obj->*f)
。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句