Если у меня есть std::map<int, char>
, это приятно и легко инициализируется:Инициализировать зЬй :: карты, используя стандартные возведенных значения
std::map<int, char> myMap =
{
{ 1, 'a' },
{ 2, 'b' }
};
Если мое значение типа имеет конструктор по умолчанию, я могу инициализировать его следующим образом :
struct Foo
{
char x;
};
std::map<int, Foo> myMap =
{
{ 1, Foo() },
{ 2, Foo() }
};
но предположу, что мое значение типа имеет конструктор по умолчанию, но громоздкий типа:
std::map<int, yourNamespace::subLibrary::moreLevels::justBecause::Thing> myMap =
{
// What goes here? I don't want to type
// yourNamespace::subLibrary::moreLevels::justBecause::Thing again.
};
Заканчивается объявление using
, чтобы сделать значение типа более удобным для клавиатуры, есть ли способ инициализировать map
набором ключей, все из которых используют построенный по умолчанию yourNamespace::subLibrary::moreLevels::justBecause::Thing
? Как я могу сигнализировать, что я хочу, чтобы преобразованное значение было построено по умолчанию из его типа?
Я думал, что смогу, и я попробовал, и это не сработало ... вот почему я пришел сюда. Дальнейшее подталкивание показывает, что оно работает в общем_, но не в том случае, если тип значения не является конструктивным. Вы знаете, почему нет? – Chowlett
@Chowlett Что касается вашего последующего вопроса, я передам вам [этот ответ] (http://stackoverflow.com/a/7232135/7359094). –
Ах. Это объяснит это. Итак, я полностью заполнен для инициализации таким образом? Я отмечаю, что даже 'myMap = {{1, Foo()}};' fail, по-видимому, точно по той же причине. – Chowlett