我在以下示例中遇到了链接错误:
在名为a.h的文件中:
namespace n {
class A {
...
public:
template<class Function, class... Args>
void a_member(Function &&f, Args &&...args);
private:
std::thread *t_;
};
}
在A.cpp中:
#include "A.h"
template<class Function, class... Args>
void n::A::a_member(Function &&f, Args &&...args) {
this->t_ = new std::thread(std::forward<Function>(f), std::forward<Args>(args)...);
}
在名为B.h的文件中:
#include "a.h"
#include "c.h" /* declaration of class C */
class B {
public:
void b_member1();
void b_member2(C c);
private:
A *a_;
};
在B.cpp:
#include "B.h"
void B::b_member1() {
C c;
this->a_ = new A();
this->a_->a_member(&B::b_member2, c);
}
我想用一个带有C类参数的成员函数来包装对线程回调的调用。
修改:
由于该方法已在标题中移动,因此错误仍然存在:对线程构造函数的调用似乎不正确(函数不匹配的签名):
this->t_ = new std::thread(std::forward<Function>(f), std::forward<Args>(args)...);