2

次のように定義されたブースト バリアントのベクトルをフィルター処理する最良の方法を探しています。

 boost::variant<T1*, T2, T3> Var;
 std::vector<Var> Vec;

このベクトルを呼び出すとき、T2 境界型のみをフィルタリングして新しいベクトルに挿入する最良の方法は何ですか? または他の方法で、私はこのようなものが欲しい

std::vector<T2> T2Vec = ...(how to filter it from Vec)....

ありがとう!

編集:「ビジター」を使用する方がより堅牢であるため、「ビジター」を使用して誰かが解決策を教えてくれるのではないかと思っていますか?

再度、感謝します!

4

1 に答える 1

4

Vec最も簡単な解決策は、要素が a であるかどうかを確認してループし、 doubledouble を a にプッシュすることT2Vecです。これは C++03 バージョンです:

for (std::vector<Var>::const_iterator it = Vec.begin(); it != Vec.end(); ++it)
{
  if (it->which() == 1) T2Vec.push_back(boost::get<T2>(*it));
}

C++11 バージョン:

for (const auto& v : Vec)
{
  if (v.which() == 1) T2Vec.push_back(boost::get<T2>(v));
}
于 2013-07-16T08:28:24.030 に答える