带有可变模板的c++绑定成员函数
C++ bind member function with variadic template
下面的例子使用可变模板在类中注册函数。注册单个函数可以工作,但是类成员函数呢?我尝试了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;
}
}
(注:成员函数指针需要与相应的对象、对象引用或指向适当类的对象的指针一起使用。如果TObject
是类值的,则成员函数调用语法将是(obj.*f)
。如果TObject
是类似指针的,语法将是(obj->*f)
。)
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 视觉studo 2019中的漫画和静态/动态绑定
- 将自由函数绑定为类成员函数
- 将常量指针引用绑定到非常量指针
- 在派生类中绑定非静态模板化成员函数
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在 openGL 中多次绑定缓冲区
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 使用结构化绑定'Reflection'
- 为什么 std::绑定错误参数可以成功?
- 如何绑定 C++ gRPC 客户端的网络接口
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- C++绑定(已弃用)
- 运行时错误:引用绑定到类型为"int"的空指针
- 有没有办法将重载的类函数绑定到函数对象?
- 替换 C++17 中移除的绑定 1st