本質上我想要一個模板類,其大小是一個模板參數,以保持不變的內容。如何從構造函數參數初始化模板成員數組?
是這樣的:
template<size_t S> struct Foo {
const int bar[S];
Foo(const int(&par)[S]) : bar(par) {
cout << "bar size is " << S << endl;
}
};
auto foo = Foo({1,2,3});
我一直在尋找和擺弄一點,幾乎都與中間靜態方法實現的解決方法和使用std ::陣列:
template<size_t S> struct Baz {
const array<int,S> qux;
Baz(const array<int,S>&par) : qux(par) {
cout << "size is " << S << endl;
}
};
template<size_t S> Baz<S>
GetBaz(const array<int,S>&in) {
return Baz<S>(in);
}
int main() {
auto sample = GetBaz({1,2,3});
return 0;
}
..這已經是一些樣板了,但是std :: array似乎還沒有從初始化列表構造出來? :-(
prog.cpp: In function 'int main()':
prog.cpp:27:30: error: no matching function for call to 'GetBaz(<brace-enclosed initializer list>)'
auto sample = GetBaz({1,2,3});
你不能用內置陣列,必須使用'的std :: array' –
對於'自動進樣做到這一點= GetBaz({1,2,3});'它失敗了,因爲你需要指定'GetBaz <5>'或其他。初始化器列表長度不是它們類型的一部分。 –
[這個答案中的代碼](http://stackoverflow.com/a/6114359/1505939)可以幫助你解決你的問題,如果你願意使用'GetBaz(1,2,3)'沒有額外的大括號 –