类内使用C++ future async失效问题咨询
问题原因与解决方法
你的代码核心问题是:非静态成员函数不能直接作为std::async的可调用对象。非静态成员函数默认需要一个类实例(this指针)作为隐含的第一个参数,你直接传递someFunction时,未指定对应的someClass实例,编译器无法解析调用上下文。
两种可行修复方案
方案1:用lambda表达式捕获当前实例
修改someFunctionMAIN的循环部分,通过lambda捕获this指针,明确指定调用当前someClass实例的someFunction:
void someFunctionMAIN(vector<objectClass*>& objects) { for (auto obj : objects) { futures.push_back(async(launch::async, [this, obj]() { this->someFunction(obj); })); } }
方案2:用std::bind绑定实例指针
通过std::bind将当前实例的this指针与成员函数绑定,把成员函数转换为可直接调用的函数对象(需要额外包含<functional>头文件):
#include <functional> void someFunctionMAIN(vector<objectClass*>& objects) { for (auto obj : objects) { futures.push_back(async(launch::async, std::bind(&someClass::someFunction, this, obj))); } }
额外注意事项
- 标准C++中
main函数返回类型必须是int,建议把void main()改为int main(),最后添加return 0;。 - 你用
new创建了objectClass对象,需在程序结束前释放内存避免泄漏:
int main() { vector<objectClass*> objects; objects.push_back(new objectClass); someClass class1; class1.someFunctionMAIN(objects); // 释放内存 for (auto obj : objects) { delete obj; } return 0; }
内容的提问来源于stack exchange,提问作者Teemu Ilomäki
相关产品推荐
相关产品推荐

