使用默认构造的值初始化std :: map

时间:2017-01-16 16:32:29

标签: c++ initializer-list default-constructor

如果我有std::map<int, char>,那么它很容易初始化:

std::map<int, char> myMap = 
{
  { 1, 'a' },
  { 2, 'b' }
};

如果我的value-type有一个默认构造函数,我可以像这样初始化它:

struct Foo
{
  char x;
};

std::map<int, Foo> myMap =
{
  { 1, Foo() },
  { 2, Foo() }
};

但是假设我的value-type有一个默认的构造函数,但输入的内容很难:

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,所有键都使用默认构造的{ {1}}?我如何表示我希望映射值是默认构造的类型?

2 个答案:

答案 0 :(得分:4)

您可以使用value initialization来解决此问题。

struct Foo
{
    char x;
};

std::map<int, Foo> myMap =
{
    { 1, {} },
    { 2, {} }
};

答案 1 :(得分:0)

你可以创建一个返回&#34; yourNamespace :: subLibrary :: moreLevels :: justBecause :: Thing&#34;的实例的函数。