2017-10-01 59 views
-3

我注意到std::optionalstd::variantstd::any都有构造接受都在同一时间std::initializer_listargs...为什么有一个构造函数接受两个initializer_list和参数包

std::optional ctor (7)

std::any ctor (6)

std::variant ctor (8)

为什么会出现这样的构造?它支持什么用例?

+3

您链接的页面有一个示例。 – chris

+0

我想你是在谈论std :: optional的例子吗? //调用std :: string(initializer_list )构造函数 std ::可选 o4(std :: in_place,{'a','b','c'});当然,没关系。但我想知道为什么在initializer_list之后有一个“参数...”。我的意思是,只是参数..没问题,只是initializer_list可以,为什么呢? – ZhangFengze

+1

“*为什么两个*”与“*如何使用它*”不是同一个问题,它有一个明显的答案。我建议你改述问你实际上想知道什么。 – StoryTeller

回答

1

好的,这是一个愚蠢的问题。

感谢大家帮我编辑问题。

可以同时使用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必须与其他模板参数特别分离。我想我可以在别的地方找到它。

相关问题