由于标题很明确,迭代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>
?
答案 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解决了问题。