如何迭代boost :: variant <std :: vector <int>,std :: vector <string>&gt;?

时间:2016-09-23 19:35:53

标签: c++ c++11 boost vector stl

由于标题很明确,迭代boost::variant<std::vector<int>, std::vector<string>>变量的最佳方法是什么?

说我有一个结构:

struct foobar{
    enum typeOfVariant {intVariant, StringVariant}
    boost::variant<std::vector<int>, std::vector<String>> variable;
    }

我在某个时刻收到的保证枚举与变体的类型相关联。

实现类似的目标:

boost::variant<std::vector<int>, std::vector<string>> var;

for (auto t in var)
{
//do something
}

^这可能是理想的方式。

或者根据枚举类型强制转换为std::vector<int>std::vector<string>

1 个答案:

答案 0 :(得分:1)

在C ++ 14中:

validates :client_id, presence: { message: "Must have a value" }, unless: :agency_id

不需要apply_visitor( var, [&](auto&& var){ for( auto&& t : var ) { // code goes here } }); 。变种知道他们自己的类型。

enum是联合和联合中正确类型的索引。该索引基本上是您的variant

我们可以使用enum块和两个版本在外部执行此操作,每个版本都假设内容是一种或另一种类型,或类似,但这会增加批量,很少增加价值。

大多数名义上的C ++ 11编译器都可以处理上述问题。没有它你必须手动编写一个复制它的函数对象类,或者你可以使用“条件转换”并将循环写入两次,每种类型一个。

我能说什么,C ++ 14解决了问题。