次のコードがあるとします。
#include <vector>
struct Foo
{
int tag = 0;
std::function<void ()> code;
};
int main()
{
std::vector<Foo> v;
}
そして今、一時的なものを明示的に作成せずFoo
に、特定のものを使用してベクターに新しいアイテムを追加したいと考えています。つまり、次のコンストラクターを追加する必要があります。tag
code
Foo
struct Foo
{
inline Foo(int t, std::function<void ()> c): tag(t), code(c) {}
int tag = 0;
std::function<void ()> code;
};
そして今、私は使用できますemplace_back
:
v.emplace_back(0, [](){});
しかし、新しく作成した構造体を使用して、これを 100 回も行う必要があったとき、ブレース初期化子を使用できないのではないかと考えました。そのようです:
#include <vector>
struct Foo
{
int tag = 0;
std::function<void ()> code;
};
int main()
{
std::vector<Foo> v;
v.push_back(Foo{ 0, [](){} });
}
これによりコンパイル エラーが発生します ('initializer-list' から 'Foo' に変換できません)。