-3
我注意到std::optional
,std::variant
,std::any
都有构造接受都在同一时间std::initializer_list
和args...
。为什么有一个构造函数接受两个initializer_list和参数包
为什么会出现这样的构造?它支持什么用例?
我注意到std::optional
,std::variant
,std::any
都有构造接受都在同一时间std::initializer_list
和args...
。为什么有一个构造函数接受两个initializer_list和参数包
为什么会出现这样的构造?它支持什么用例?
好的,这是一个愚蠢的问题。
感谢大家帮我编辑问题。
可以同时使用initializer_list和parameter pack。
例如,std :: vector有一个接受initializer_list和allocator的构造函数。
我测试了一下,这似乎是答案。
std::variant<std::vector<int,std::allocator<int>>> v(std::in_place_index<0>,{1,2,3,4},std::allocator<int>());
for(int i: std::get<0>(v))
{
std::cout<<i<<std::endl;
}
还有一个问题,为什么initializer_list必须与其他模板参数特别分离。我想我可以在别的地方找到它。
您链接的页面有一个示例。 – chris
我想你是在谈论std :: optional的例子吗? //调用std :: string(initializer_list)构造函数 std ::可选 o4(std :: in_place,{'a','b','c'});当然,没关系。但我想知道为什么在initializer_list之后有一个“参数...”。我的意思是,只是参数..没问题,只是initializer_list可以,为什么呢? –
ZhangFengze
“*为什么两个*”与“*如何使用它*”不是同一个问题,它有一个明显的答案。我建议你改述问你实际上想知道什么。 – StoryTeller