在c ++ 17中使用另一个构造函数而不是默认构造函数在堆栈中构造数组是一种方式。
当使用相同的构造函数参数构造每个数组值时,这是一种特殊情况。
我需要使用基本堆栈定位数组(不是向量或指针数组或其他东西)。
此代码说明了我想要做的事情:
#include <iostream>
using namespace std;
struct A {
A() {
printf("A() called\n");
}
A(int i, int j) {
printf("A(%d, %d) called\n", i, j);
}
};
struct B {
A tab[100];
B(int i, int j) {
// I would like to call A(i, j) for each tab entries instead of the default constructor
printf("B(%d, %d) called\n", i, j);
}
};
int main() {
B b(1, 7);
return 0;
}
由于
答案 0 :(得分:2)
通常的委托构造函数+整数序列+包扩展技巧:
struct B {
A tab[100];
template<size_t... Is>
B(int i, int j, std::index_sequence<Is...>) : tab{ {(void(Is), i), j }... } {}
B(int i, int j) : B(i, j, std::make_index_sequence<100>()) {}
};
在SO中搜索{+ 1}}和C ++ 11中的朋友的实现。