データ メンバーwrapper
をラップするクラスがあります。のコンストラクターがその引数を の ctor に転送するようにしstd::vector<int>
ます。これを実装するために、可変個引数テンプレート コンストラクターを使用しようとしました。は ctor によって構築されるため、実行時にのctorをアクティブにしたいwrapper
vector<int>
std::vector<int> v{1, 2, 3}
std::initializer_list
wrapper
vector
initializer_list
wrapper mywrap{1, 2, 3}
.
しかし、私は望ましい結果を得られませんでした:
#include <iostream>
#include <vector>
struct wrapper {
std::vector<int> v;
template <typename ...Tn> wrapper(Tn ...args) : v(args...) {}
};
int main() {
//----Output----
wrapper wrap1{ 1 };
std::cout << wrap1.v.size() << std::endl; // 1
std::cout << wrap1.v.at(0) << std::endl; // 0
wrapper wrap2{ 1, 2 };
std::cout << wrap2.v.size() << std::endl; // 1
std::cout << wrap2.v.at(0) << std::endl; // 2
wrapper wrap3{ 1, 2, 3 }; // error
wrapper wrap4{ std::initializer_list<int>{ 1, 2, 3 } }; // OK
}
出力は次のとおりです。
wrapper wrap1{ 1 };
を呼び出しますexplicit vector (size_type n);
。
wrapper wrap2{ 1, 2 };
通話
vector (size_type n, const value_type& val, const allocator_type& alloc = allocator_type());
.
wrapper wrap3
が指定されていない場合は失敗しinitializer_list<int>
ます。
vector
いずれの場合も、のinitializer_list<int>
ctor をアクティブにしたかったのです。これはどのように修正できますか?