这就是我想要做的事情:
boost::variant a<int, string>;
int b;
a=4;
b=a; //doesn't work. What is the easiest way to make b=4?
我知道我可以使用get,但我希望能够在不指定类型的情况下执行此操作。我可以用apply_visitor和一个访问者对象来做,但我想知道是否有更简单的方法。
答案 0 :(得分:2)
如果你有一个支持C ++ 0x的编译器,你可以使用惊人的decltype
:
boost::variant a<int, string>;
int b;
a = 4;
b = boost::get<decltype(b)>(a);
我不知道你为什么要这样做,因为你已经知道了这个类型。
答案 1 :(得分:2)
您可以编写辅助函数:
template <class V, typename T>
copy_variant(const V& v, T& t) { t = get<T>(v); }
// ...
copy_variant(a, b);
但严重的是,我认为这比你买的更多。
答案 2 :(得分:1)
不。
您可以致电variant<>::which()
获取variant<>
当前初始化类型的索引,或variant<>::type()
来获取当前初始化类型的std::type_info
,但是没有提取除get<>
和apply_visitor
以外的当前初始化类型的值的方法。