2

我正在寻找过滤已定义如下的 boost 变体向量的最佳方法:

 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 double,然后将 double 推入 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 回答