Допустим, у меня есть следующий код:
#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, [](){});
Но когда мне пришлось сделать это снова — в сотый раз — с только что созданной структурой, я подумал: а нельзя ли использовать инициализатор фигурной скобки? Вот так:
#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'), но я надеюсь, что это можно сделать, и я просто ошибся в синтаксисе.