【发布时间】:2017-02-01 18:15:11
【问题描述】:
由于标题非常具有解释性,那么迭代 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>?
【问题讨论】:
-
std::visit有什么问题? -
@Yakk 不是在提升吗?根据文档,Boost 的版本(名为
apply_visitor)还需要result_typetypedef,除非您是 C++14。 -
−1 呈现的代码不是真正的代码,例如缺少分号。此外,“枚举与变体中的类型相关。”是没有意义的:一个类型不能与一个动态值相关联。除去所有误导性的东西,问题只是如何访问
boost::variant所持有的内容,documentation 显示了这一点。'
标签: c++ c++11 boost vector stl