簡體   English   中英

將Boost變體的向量過濾為新向量?

[英]filter a vector of boost variant into a new vector?

我正在尋找最好的方法來過濾定義為boost的矢量的矢量:

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

當我將此向量稱為“向量”時,僅過濾T2有界類型並將其插入新向量的最佳方法是什么? 或者以其他方式,我想要這樣的東西

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

謝謝!

編輯:由於使用“訪客”更強大,我也想知道有人可以使用“訪客”給我解決方案嗎?

再次感謝!

最簡單的解決方案是遍歷Vec ,檢查元素是否為double ,然后將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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM