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

Initialize std::map, using default-constructed values

本文关键字:初始化 std map 默认      更新时间:2023-10-16

如果我有一个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?如何发出信号,表明我希望映射值默认构造其类型?

您可以使用值初始化来解决此问题。

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

你可以创建一个函数来返回"yourNamespace::subLibrary::moreLevels::justWhy::Thing"的实例。