c ++ 11线程向量作为类成员

时间:2013-12-03 02:38:19

标签: c++ multithreading oop c++11 vector

有人可以解释为什么我不能写这样的线程向量:

//This is declared in a namespace
const uint MAXTHREADSAMOUNT = std::thread::hardware_concurrency();
//...

//declared in the same namespace
class AI {
    static vector<std::thread> Helpers(MAXTHREADSAMOUNT);
};

相反,编译器迫使我使用这个看起来很奇怪的方法:

class AI {
    static vector<std::thread> Helpers(std::thread);
};

编译第一个时收到的错误信息是:

error: 'MAXTHREADSAMOUNT' is not a type

它与静态向量无关,但我注意到,如果向量未在类或结构对象中声明,则第一种方法有效。

所以我的问题是为什么vector需要通过构造函数显式传递存储的类型而不是使用模板中已经声明的类型?

1 个答案:

答案 0 :(得分:4)

你不能内联初始化静态数据成员,第二个版本也是错误的,它实际上是一个函数声明,它返回一个线程向量并接受一个线程。只需像你想象的那样在课堂外初始化它。

vector<std::thread> AI::Helpers(MAXTHREADSAMOUNT);