C++中如何在func内获取传入的A->function对应的对象A?
解决C++中传递成员函数时获取对象实例的问题
直接传递A->function这种成员函数指针的话,func()里是拿不到对象A的——成员函数指针仅关联函数的代码逻辑,不绑定具体的对象实例。要在func()中获取A,有几种实用方案:
方案1:同时传递对象指针与成员函数指针
这是最直接的传统写法,明确把对象和成员函数分开传入:
// 假设A是MyClass类型的指针 class MyClass { public: void function() {} }; // 定义func,接收对象指针和成员函数指针 void func(MyClass* obj, void (MyClass::*mem_func)()) { // 这里obj就是你要的变量A,可直接操作 (obj->*mem_func)(); // 调用成员函数 } // 调用示例 MyClass* A = new MyClass(); func(A, &MyClass::function);
如果想让func支持任意类的成员函数,可以用模板:
template<typename T> void func(T* obj, void (T::*mem_func)()) { (obj->*mem_func)(); // 直接使用obj(即A)做其他操作 }
方案2:传递绑定了对象的Lambda表达式
C++11及以后推荐这种写法,简洁灵活,可直接把对象和成员函数绑定成可调用对象:
#include <functional> void func(std::function<void()> callable) { callable(); // 调用时自动使用绑定的A对象 // 若需直接操作A,可调整Lambda逻辑,比如让callable返回A的指针 } // 调用示例 func([A]() { A->function(); // 也可以在这里把A的指针暴露给func,比如修改func参数为std::function<MyClass*()> });
如果要在func里直接拿到A,可以修改func的参数类型:
void func(std::function<MyClass*()> get_obj) { MyClass* obj = get_obj(); obj->function(); // 直接操作obj(即A) } // 调用时 func([A]() { return A; });
方案3:使用std::bind绑定对象与成员函数
和Lambda类似,用std::bind生成绑定了对象的可调用对象:
#include <functional> void func(std::function<void()> callable) { callable(); } // 调用示例 auto bound_func = std::bind(&MyClass::function, A); func(bound_func);
如果要在func中获取A,同样需要在绑定额外传递对象指针,或者通过调整func的参数来实现。
内容的提问来源于stack exchange,提问作者keviniskw
相关产品推荐
相关产品推荐

