我正在寻找过滤boost变体矢量的最佳方法,该变量已定义如下:
boost::variant<T1*, T2, T3> Var;
std::vector<Var> Vec;
当我调用此向量时,仅过滤T2有界类型并插入新向量的最佳方法是什么? 或者换句话说,我想要这样的东西
std::vector<T2> T2Vec = ...(how to filter it from Vec)....
谢谢你!
编辑: 由于使用“访客”更加强大,我也想知道有人可以使用“访客”给我一个解决方案吗?
再次感谢!
答案 0 :(得分:4)
最简单的解决方案是循环Vec
,检查元素是否为double
,然后将双精度推送到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));
}