はタイトルとしてはかなり説明していますが、boost::variant<std::vector<int>, std::vector<string>>
変数を繰り返し処理するにはどうすればよいでしょうか?boost :: variant <std :: vector <int>、std :: vector <String>>を反復処理する方法は?
は、私が構造を持っていると言う:
struct foobar{
enum typeOfVariant {intVariant, StringVariant}
boost::variant<std::vector<int>, std::vector<String>> variable;
}
私は列挙型がバリアントの型にcorelatedされていることを保証して、ある時点で受け取ること。
boost::variant<std::vector<int>, std::vector<string>> var;
for (auto t in var)
{
//do something
}
^これは理想的な方法であるかもしれない:多分ような何かを達成するために
。
または、列挙型に基づいてstd::vector<int>
またはstd::vector<string>
に強制的に変換しますか? C++ 14では
'std :: visit'の何が問題なのですか? – Yakk
@Yakkそれはブーストにありませんか? Boostのバージョン( 'apply_visitor'という名前)は、ドキュメントによると、あなたがC++ 14でない限り、' result_type' typedefも必要です。 –
** - 1 **表示されるコードは**実際のコードではありません**。セミコロンの欠如。また、 "列挙型は、バリアントのタイプとコアレットされています。"タイプは意味がありません:タイプは動的な値と相関することはできません。すべての誤解を招くようなものを除いて、疑問は単純に 'boost :: variant'が保持するものにアクセスする方法です。**ドキュメント**にはそのことが示されています。 –