我正在尝试让一个类将继承的模板化方法启动到多个线程中。
基本思想是让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炸弹)