1

这就是我想要做的:

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

4

3 回答 3

2

如果你有一个支持 C++0x 的编译器,你可以使用惊人的decltype

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

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

于 2011-08-13T02:43:57.477 回答
2

您可以编写一个辅助函数:

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

// ...

copy_variant(a, b);

但说真的,我认为这让你付出的比买来的更多。

于 2011-08-13T02:49:59.387 回答
1

没有。

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

于 2011-08-13T02:46:03.210 回答