You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 04:54:16