boost :: variant获取最后访问的类型

时间:2011-08-13 02:38:52

标签: c++ boost boost-variant

这就是我想要做的事情:

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和一个访问者对象来做,但我想知道是否有更简单的方法。

3 个答案:

答案 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以外的当前初始化类型的的方法。