启动运行继承模板化方法的线程

时间:2014-11-30 23:22:16

标签: c++ templates c++11 c++14 stdthread

我正在尝试让一个类将继承的模板化方法启动到多个线程中。

基本思想是让class A能够顺序完成工作,并让class B能够并行执行A(使用自定义参数)并行执行相同的工作

我的课程和方法都有模板......看起来像是一个问题

这是一个重现行为的基本例子。我知道这个例子以愚蠢的方式使用模板,但它只是有一个可重现的例子。

#include <iostream>
#include <thread>
#include <vector>
#include <string>

template <typename T>
class A
{
  public: 
    template <typename U>
    void run(T n, U m) const
    { 
      std::cout << m << n << std::endl;
    }
};

template <typename T>
class B : public A<T>
{
  public:
    template <typename U>
    void run(T n, U m) const
    {
      std::cout << m << n << std::endl;
      std::vector<std::thread> threads;
      for (T i=0; i<n; ++i)
        threads.push_back(std::thread(&A<T>::run<U>, this, i, m));
      for (std::thread& thread : threads)
        thread.join();
    }
};

int main()
{
  A<int> a;
  a.run<const char*>(5, "simple try: ");
  B<size_t> b;
  b.run<std::string>(5, "inhereted case: ");
  return 0;
}

gcc(4.9.2)告诉我

src/threads.cc:27:34: erreur: expected primary-expression before ‘(’ token
 threads.push_back(std::thread(&A<T>::run<U>, this, i, m));
                              ^

std::thread(&A<T>::run<U>, this, i, m)替换std::thread(&B<T>::run<U>, this, i, m)会使这段代码编译(并且可以使用fork炸弹)

0 个答案:

没有答案