我有一个模板类,想在它的构造函数中传递一个对数组的引用,使用花括号初始化器。
template<typename T, size_t ar_sz> class Test_class {
// Thats incorrect
/*
T t;
size_t size;
*/
// Thats correct?
T array[ar_sz];
public:
Test_class(const T (&array)[ar_sz]) {
}
};
int main() {
constexpr size_t array_sz = 1;
int ar_i[array_sz]{ 1 };
Test_class test_ar{ ar_i };
}
那么,如何正确地做到这一点呢?
编辑:
我想补充的是,我需要将L"test"
传递给一个构造函数,它是一个const wchar_t[5]
,所以这个任务不能用std::array<>
来解决。
2条答案
按热度按时间qojgxg4l1#
编译器推导出
T = int
和ar_sz = 1
。在模板中,声明T t;
的含义与int t;
相同。你不想这样的!你想要T t[ar_sz];
。顺便说一句,为了减少混淆,使用大于1的数组大小。另一个问题是(正如其他人所指出的):你不能用另一个数组初始化一个数组。你需要明确的复制。
8yparm6h2#
使用std::array作为已经建议的,同样当初始化时,你需要一对额外的{}来传递值。