Boost::variant获取最后访问类型

boost::variant get last accessed type

本文关键字:访问类型 最后 variant Boost 获取      更新时间:2023-10-16

这就是我想做的:

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

如果你有一个支持c++ 0x的编译器,你可以使用神奇的decltype:

boost::variant a<int, string>;
int b;
a = 4;
b = boost::get<decltype(b)>(a);

我不知道你为什么要这样做,因为你已经知道了类型。

你可以写一个辅助函数:

template <class V, typename T>
copy_variant(const V& v, T& t) { t = get<T>(v); }
// ...
copy_variant(a, b);

但说真的,我觉得你花的钱比买到的要多。

您可以调用variant<>::which()来获取variant<>当前初始化类型的索引,或者调用variant<>::type()来获取std::type_info当前初始化类型的索引,但是除了get<>apply_visitor之外,没有办法提取当前初始化类型的