错误原因
非静态成员函数需要通过对象实例来调用,因为它们隐含地包含一个 this
指针。直接传递成员函数指针给 std::thread
构造函数是不行的,因为它不知道该函数属于哪个对象。
解决方法
需要使用 std::bind
或者 lambda 表达式来绑定成员函数和对象实例。以下是两种解决方法:
Threads.emplace_back(
[worker_id, &weights_, &weights_loader]() {
weights_[worker_id]->LoadWeight(weights_loader);
}
Threads.emplace_back(
std::bind(&class::LoadWeight, weights_[worker_id], weights_loader)
);