有人能解释一下为什么我不能写这样的线程 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 无关,但我注意到如果 vector 未在类或结构对象中声明,则第一种方法有效。
所以我的问题是为什么 vector 需要存储的类型通过构造函数显式传递而不是使用已经在模板中声明的类型?
最佳答案
你不能内联初始化静态数据成员,第二个版本也是错误的,它实际上是一个函数声明,返回一个线程 vector 并接受一个线程。只需像您应该的那样在类外初始化它。
vector<std::thread> AI::Helpers(MAXTHREADSAMOUNT);
关于作为类成员的线程的 c++11 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20341828/