Aslında, sabit içeriği korumak için boyutu şablon parametresi olan bir diziye sahip bir şablon sınıfı istiyorum. gibiŞablon üyesi dizisini constructor parametresinden nasıl başlatılır?
şey: Ben arama ve biraz müdahalesi ve neredeyse bir çözüm bir ara statik yöntemle uygulayan ve std :: dizi kullanıyoruz
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});
:
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;
}
.. Zaten oldukça boilerplate olan, ancak hala std :: array bir başlatıcı listesinden oluşturulmuş gibi görünmüyor mu? :-(
Tamamen soruları anlaşılmış iseprog.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});
Dizideki yerleşik, std :: 'oto numune için –
array'' kullanmalıdır ile bunu yapamaz = GetBaz ({1,2,3}); '' GetBaz <5> 'ya da her neyse belirtmeniz gerektiğinden başarısız olur. Başlatıcı listesi uzunluğu türlerinin bir parçası değildir. –
[Bu yanıttaki kod] (http://stackoverflow.com/a/6114359/1505939), 'GetBaz (1,2,3)' seçeneğini ekstra kullanmadan kullanmak istediğinizde sorununuzu çözmenize yardımcı olabilir –