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

Initialize std::map, using default-constructed values

如果我有一个 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?我如何表示我希望映射值是其类型的默认构造?

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

struct Foo
{
    char x;
};

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

您可以创建一个 returns "yourNamespace::subLibrary::moreLevels::justBecause::Thing" 实例的函数。