std::initializer_list
パラメータとして aを取るコンストラクタを作成します。
#include <vector>
#include <initializer_list>
template <typename T>
struct foo
{
private:
std::vector<T> vec;
public:
foo(std::initializer_list<T> init)
: vec(init)
{ }
};
int main()
{
foo<int> f {1, 2, 3, 4, 5};
}
std::vector
これはほとんど同じ方法です (ただしbegin()
、and end()
-std::initializer_list
は他のコンテナーとほぼ同じ方法でイテレーターを使用します)。からgcc
:
vector(initializer_list<value_type> __l,
const allocator_type& __a = allocator_type())
: _Base(__a)
{
_M_range_initialize(__l.begin(), __l.end(),
random_access_iterator_tag());
}
編集:私はあなたがやろうとしていることを100%ではありませんが、均一な初期化を使用して必要なものを取得できる場合があります:
struct bar
{
private:
int i;
double j;
std::string k;
public:
bar(int i_, double j_, const std::string& k_)
: i(i_), j(j_), k(k_)
{ }
};
int main()
{
bar b {1, 2.0, "hi"};
}