这就是我想要做的:
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 和一个访问者对象来做到这一点,但我想知道是否有更简单的方法。
这就是我想要做的:
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 和一个访问者对象来做到这一点,但我想知道是否有更简单的方法。
如果你有一个支持 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()
获取当前初始化类型的索引,但是除了and之外std::type_info
没有其他方法可以提取当前初始化类型的值。get<>
apply_visitor