2016-09-30 89 views
4

我學到了在C++ 17中有一個std::variant類型。 看起來變體容器不支持預定義的數據類型,但對於每種變體類型,用戶可以定義自己的數據類型集。std :: variant定義了多少種類型?

std::variant<int, float> v; 

我想知道,類型列表可以多長時間?該庫是否具有Aleksandrescu方式的最大數量參數的預定義模板,或者是編譯器支持的變體,並且類型數量不受限制?

回答

5

模板參數的最大數量受編譯器實現限制。

The C++ standard says

因爲計算機是有限的,C++實現都不可避免地在它們 可以成功地處理的程序的大小的限制。每個實施應記錄已知的限制。這種指導可以在它們存在的地方引用固定的限制,例如如何根據可用的資源來計算可變限制,或者說固定的限制不存在或者是未知的。

該限制可能會限制數量,包括下面描述的數量或其他數量。 推薦使用括號中的數字 作爲該數量的最小值。但是,這些數量僅爲 指南,並未確定是否符合規定。這是事實,但是否適用於STD -

...

在模板聲明模板參數[1024]

+0

「的模板參數的最大數量由編譯器實現的限制」 ::變種? std :: variant不是由實現有其自身的限制嗎? –

+0

@ValentinHeinitz你的兩個問題的答案:它確實; AFAIK沒有。 –

+0

ОК,太棒了!所以它確實是一個新的C++ 11編譯器功能,而不是像boost這樣的庫的附加組件。 –