2016-09-30 9 views
4

私は、std::variantタイプがC++ 17であることを知りました。 バリアントコンテナでサポートされている定義済みのデータ型がないように見えますが、各バリアント型について、ユーザーは独自のデータ型セットを定義できます。std :: variantにはいくつのタイプが定義できますか?

std::variant<int, float> v; 

種類のリストはどのくらいの期間ですか?ライブラリには、Aleksandrescuの方法で最大数のパラメータ用に定義済みのテンプレートがあるか、またはコンパイラでサポートされているバリアントであり、型の数に制限はありませんか?

答えて

5

テンプレートパラメータの最大数は、コンパイラの実装によって制限されます。

The C++ standard says

コンピュータは有限であるため、C++の実装は、必然的に、彼らは成功し 処理できるプログラムのサイズに制限されています。すべての実装は、既知の場合には、これらの制限事項を文書化するものこの文書の のコメントには、存在する固定された制限が引用されているか、利用可能な リソースの関数として変数の制限を計算する方法、または固定された制限が存在しない、または不明であると言うことがあります。

この制限は、以下に説明するものや他のものを含む量を制限することがあります。 各数量に続く括弧内の数字 がその数量の最小値として推奨されます。ただし、これらの数値は のガイドラインのみであり、準拠性は判断されません。

は...テンプレート宣言で

テンプレート引数[1024]

+0

は「テンプレートパラメータの最大数は、コンパイラの実装によって制限されている」 - それは本当だが、それはSTDには適用されません::バリアント? std :: variantには実装上の制限がありますか? –

+0

@ValentinHeinitzあなたの2つの質問に答えます。 AFAIKはありません。 –

+0

ОК、素晴らしい!つまり、ブーストのようなライブラリへのアドオンではなく、本当に新しいC++ 11コンパイラ機能です。 –

関連する問題