gpt4 book ai didi

c++ - 如何将无符号参数传递给模板?

转载 作者:行者123 更新时间:2023-11-28 05:26:40 24 4
gpt4 key购买 nike

我有两个文件 - 一个文件用于将无符号参数传递给模板,另一个文件包含模板声明和定义。

/*File1.cc */
#include "File2.h"
int main()
{
unsigned n = 10;
ThreadPool<n> pool; //Error
.....
}




/* File_2.h */
....
namespace nbsdx {
namespace concurrent {

template <unsigned ThreadCount>
class ThreadPool {
std::array<std::thread, ThreadCount> threads;
....
};
}}

ThreadPool<n> pool;行抛出一个错误并且只接受一个 const 值。有什么方法可以将 n 值传递给 ThreadCount

编辑:我希望线程的大小在编译后可变。

最佳答案

模板参数和 std::array 的大小必须在编译时已知,以便编译器可以生成正确的代码。

选项:

所有内容的静态大小。一切都在编译时设置,不能在运行时更改。 Documentation on constexpr .

#include <array>
#include <thread>

template <unsigned ThreadCount>
class ThreadPool {
std::array<std::thread, ThreadCount> threads;
};

int main()
{
constexpr unsigned n = 10; // n is fixed at compile time and unchangable.
ThreadPool<n> pool; //Error
}

std::vectorthreadpool 构造函数的一个参数,以及 Member Initializer List

#include <vector>
#include <thread>

class ThreadPool {
std::vector<std::thread> threads;
public:
ThreadPool(unsigned n): threads(n) // constructs threads with n elements
{
}
};

int main()
{
unsigned n = 10;
ThreadPool pool(n);
}

关于c++ - 如何将无符号参数传递给模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40433619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com