C++标准库中boost::variant的等价物是什么?

13

我正在寻找一种替代C语言风格联合的方法。boost::variant是一个选择。在std C++中有类似的东西吗?

union {
   int i;
   double d;
}

1
目前还没有,但 Boost.Variant 很有可能会出现在 TR2 中。 - ildjarn
1
遗憾的是,大部分的boost库目前还没有对应的std标准库。 - Mooing Duck
9
使用 Boost 没有任何问题。C++ 的整个意义在于它允许你编写能够实现有用功能的库。它并不试图为你提供一切,而是给你工具去 创建 你所需要的所有东西。使用 Boost。 - Kerrek SB
4
请注意,boost::variant是一个仅包含头文件的库,因此如果您仅使用boost::variant,则无需担心构建/链接Boost库。只需确保将指向Boost头文件的路径包含在您的项目/IDE/makefile中即可。 - Emile Cormier
1
@EvanTeran - 不受限制的联合体可能更容易实现变体类型,但它们不能替代它们。 - Ferruccio
显示剩余4条评论
3个回答

25

正如一些评论所说:没有标准C++中类似于Boost Variant的东西。也许几年后会有,但为什么要等待——今天就使用Boost Variant吧!


编辑(四年后,2016年):在C++17中将会有std::variant。与boost::variant类似但并不相同。因此,当你的编译器支持C++17时,你将拥有一个标准库中的解决方案。


这怎么能被视为答案呢?这是一条评论。 - Brett Hale
这个答案很快就会过时了。C++17将包括std::variant,http://en.cppreference.com/w/cpp/utility/variant - TimZaman
@TimZaman:感谢提醒。我添加了一个编辑来说明C++17的支持。 - John Zwinck
@JohnZwinck:如果您能看一下我刚刚根据您的答案提出的问题,我会很高兴的:std::variant和boost::variant之间有什么区别? - einpoklum

10
几年过去了:现在一个提案正在进行中。可能boost::variant将被纳入C++17!在那之前,我们将不得不使用仍然很棒的boost::variant。请注意,std::variant的细节将会有一些变化。

更新:该提案已经通过。std::variant将成为新的C++17标准的一部分。这里是Herb Sutter于2016年6月的会议报告链接,他在那里确认了这一点。


你能列出这些变化中的一些吗? - einpoklum
更改仍然可能会更改。;)一些更改是有争议的。此外,它不太表面化,但有一些复杂的设计决策。为了不必要地复杂化答案,我选择简洁明了。我的答案中提供了该提案的链接,其中包含一些问题的解决方案。 - Ralph Tandetzky

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接