作为类成员的线程的 c++11 vector

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

有人能解释一下为什么我不能写这样的线程 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/

相关文章:

实现相同接口(interface)的枚举上的Java开关

c++ - C++中的实例化

c++ - 您将如何支持 libQtCassandra 库中的 super 列?

c++ - 这个 C++ 引用初始化合法吗?

c++ - C++ 中的多线程池

oop - 什么时候使用私有(private)方法?

c++ - C++中的按位运算,如何实际使用它?

java - Java 中的 Monitor.TryEnter 等价物

c - 使用 C 中的缓冲区和多线程从文本文件读取

c++ - 试图引用对象工厂中已删除的函数