使用task-thread-pool调用带参成员函数submit报错,求排查
类成员函数提交到task-thread-pool的错误修复
你遇到的问题核心是非静态类成员函数的调用依赖类实例:
- 非静态成员函数(比如
Model::sum)隐含了一个this指针参数,用来指向调用该函数的类对象。直接传递&sum时,线程池无法自动获取当前的Model实例,导致参数列表不匹配,触发模板匹配错误。 - 而无参lambda是独立的可调用对象,没有隐含的
this依赖,所以能被线程池正常处理。
修复方法
在类的成员函数(比如SubscribeMLStatusCallBackFn)中提交sum时,需要显式传入当前对象的this指针,同时明确写出完整的成员函数指针类型:
std::future<int> sum_future = pool.submit(&Model::sum, this, 1, 2);
参数顺序为:成员函数指针 → 类实例指针 → 成员函数的实际参数(1、2)。
如果是调用其他Model实例的sum函数,只需把this换成对应实例的指针/引用即可:
Model other_model; std::future<int> sum_future = pool.submit(&Model::sum, &other_model, 1, 2);
内容的提问来源于stack exchange,提问作者Sijith
相关产品推荐
相关产品推荐

