自定义聚合初始化列表构造函数
Custom aggregate initializer list constructor
例如,nlohmann json 有一种将聚合初始值设定项列表转换为 JSON 对象的方法:
json j = {
{"pi", 3.141},
{"happy", true},
{"name", "Niels"},
{"nothing", nullptr},
{"answer", {
{"everything", 42}
}},
{"list", {1, 0, 2}},
{"object", {
{"currency", "USD"},
{"value", 42.99}
}}
};
和 c++ std::map
也有一个 aggeragte initalizer 列表
{
{"one": 1},
{"two": 2}
}
我很好奇如何编写自定义(聚合)初始化器列表初始化器
在标准库中很容易学习 howtos。
map( std::initializer_list<value_type> init,
const Compare& comp = Compare(),
const Allocator& alloc = Allocator() );
std::pair<const Key, T>, Key is std::string, T is int
所以构造函数是
map( std::initializer_list<std::pair<std::string, int>> init,
const Compare& comp = Compare(),
const Allocator& alloc = Allocator() );
并且可以像with
一样使用
{
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}
}
例如,nlohmann json 有一种将聚合初始值设定项列表转换为 JSON 对象的方法:
json j = {
{"pi", 3.141},
{"happy", true},
{"name", "Niels"},
{"nothing", nullptr},
{"answer", {
{"everything", 42}
}},
{"list", {1, 0, 2}},
{"object", {
{"currency", "USD"},
{"value", 42.99}
}}
};
和 c++ std::map
也有一个 aggeragte initalizer 列表
{
{"one": 1},
{"two": 2}
}
我很好奇如何编写自定义(聚合)初始化器列表初始化器
在标准库中很容易学习 howtos。
map( std::initializer_list<value_type> init,
const Compare& comp = Compare(),
const Allocator& alloc = Allocator() );
std::pair<const Key, T>, Key is std::string, T is int
所以构造函数是
map( std::initializer_list<std::pair<std::string, int>> init,
const Compare& comp = Compare(),
const Allocator& alloc = Allocator() );
并且可以像with
一样使用{
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}
}