gpt4 book ai didi

c++ - 如何在构造函数中将对象数组初始化为相同的值?

转载 作者:太空狗 更新时间:2023-10-29 23:43:49 24 4
gpt4 key购买 nike

我的代码中有以下几行:

#define NUM_THREADS 8 // NUM_THREADS is variable

myClass myVar[NUM_THREADS] {{&A,&x}};

A 和 x 只是在 myClass 构造函数中使用的变量,用于设置 myVar 对象的某些变量的大小。但是,直到运行时才知道 A 和 x 的值。

由于 NUM_THREADS 是可变的,我想要的是每个对象(即 myVar[NUM_THREADS-1:0] 获取发送给构造函数的相同值,而不必手动输入以下内容。:

myClass myVar[NUM_THREADS] {{&A,&x},{&A,&x},{&A,&x},{&A,&x},{&A,&x},{&A,&x},{&A,&x},{&A,&x}};

这是构造函数的样子:

myClass::myClass(Aclass *A_orig, Xclass *x_orig) { 
A_new = *A_orig;
x_new = *x_orig;
}

最佳答案

您可以使用 std::index_sequence 在参数包中生成从 0N 的数字。我会这样做:

MyClass&& make_my_class(std::size_t, MyClass&& m) { return std::move(m); }

template<std::size_t... S>
void makeThreads(std::index_sequence<S...>) {
std::array<MyClass, S> myVar{make_my_class(S, {&A,&x})...};
}

template<std::size_t N>
void makeThreads() {
makeThreads(std::make_index_sequence<N>{});
}

现在,您可以像这样使用它:

constexpr std::size_t numberOfThreads = 8;

makeThreads<numberOfThreads>();

此解决方案的优势在于生成的代码与您手动编写的代码完全相同。

此解决方案的一个缺点是您必须在编译时知道所需的线程数,而使用 vector 的解决方案允许在运行时确定大小。这是有道理的,因为您要求编译器为您填充大括号。要让编译器执行此操作,它必须知道您希望它在数组初始化中重复的 MyClass 的数量。

关于c++ - 如何在构造函数中将对象数组初始化为相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40429263/

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