线程模板:链接错误

时间:2016-06-15 00:09:59

标签: c++ templates c++11

我在以下示例中遇到了链接错误:

在名为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)...);

0 个答案:

没有答案