本質的には、一定の内容を保持するために、サイズがテンプレートパラメータである配列を持つテンプレートクラスが必要です。等コンストラクタパラメータからテンプレートメンバ配列を初期化するにはどうすればよいですか?
何か:私は検索ビットをいじり、ほとんど回避策は、中間静的メソッドで実装しているとstd ::アレイを使用している
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;
}
..既にかなりの定型文ですが、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)'を余分なものなしで使用したい場合、あなたの問題を解決するのに役立ちます中括弧 –