C++ 自定义聚合初始值设定项列表构造函数

C++ 自定义聚合初始值设定项列表构造函数,c++,initialization,initializer-list,list-initialization,C++,Initialization,Initializer List,List Initialization,例如,有一种将聚合初始值设定项列表转换为JSON对象的方法: json j={ {“pi”,3.141}, {“快乐”,没错}, {“名字”,“尼尔斯”}, {“没什么”,nullptr}, {“回答”{ {“一切”,42} }}, {“列表”{1,0,2}, {“对象”{ {“货币”、“美元”}, {“值”,42.99} }} }; 和C++ 也有一个GraceGe整流器列表 { {“一”:1}, {“两”:2} } 我很好奇如何编写自定义(聚合)初始化器列表初始化器在标准库中学习如何很容

例如,有一种将聚合初始值设定项列表转换为JSON对象的方法:

json j={
{“pi”,3.141},
{“快乐”,没错},
{“名字”,“尼尔斯”},
{“没什么”,nullptr},
{“回答”{
{“一切”,42}
}},
{“列表”{1,0,2},
{“对象”{
{“货币”、“美元”},
{“值”,42.99}
}}
};

和C++ 也有一个GraceGe整流器列表

{
{“一”:1},
{“两”:2}
}

我很好奇如何编写自定义(聚合)初始化器列表初始化器

在标准库中学习如何很容易

看看下面的例子:

所以构造函数是

map( std::initializer_list<std::pair<std::string, int>> init,
     const Compare& comp = Compare(),
     const Allocator& alloc = Allocator() );
然后看看

它可以像这样构造

std::pair<std::string, int> a{"one", 1};

没有“聚合初始值设定项列表”构造函数。这只是列表初始化的一个应用程序。每个带括号的init列表都只是调用构造函数的一种方式。是的,但是如何为它编写自定义初始值设定项(如果可以的话)?您可以查看json.hpp内部,了解它是如何编写构造函数的。更复杂的json示例如何?如果你能解释的话,我接受你的回答@FloweyTF:这是一样的,只是使用了不同的类型。没什么特别的。只需查看
json
类型的构造函数即可。更复杂的json可以通过
std::map
classjsonitem:public std::variant{};使用JSON=std::mapmap( std::initializer_list<std::pair<std::string, int>> init,
     const Compare& comp = Compare(),
     const Allocator& alloc = Allocator() );
{
  std::pair("one", 1),
  std::pair("two", 2),
}
pair( const T1& x, const T2& y );
std::pair<std::string, int> a{"one", 1};
std::pair<std::string, int> a = {"one", 1};
{
{"one", 1},
{"two", 2}
}