2017-10-01 54 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必須與其他模板參數特別分離。我想我可以在別的地方找到它。

相關問題