【问题标题】:What is the equivalent of boost::variant in the C++ standard library?C++ 标准库中 boost::variant 的等价物是什么?
【发布时间】:2012-04-07 13:00:20
【问题描述】:

我正在寻找 C 风格联合的替代方案。 boost::variant 就是这样一种选择。标准 C++ 中有什么吗?

union {
   int i;
   double d;
}

【问题讨论】:

  • 没有,但 Boost.Variant 极有可能在 TR2 中。
  • 遗憾的是,大多数 boost 还没有 std 等价物。
  • 使用 Boost 没有错。 C++ 的全部意义在于它允许您编写做有用事情的库。它不会尝试提供开箱即用的一切,而是为您提供工具来制作您需要的一切。使用 Boost。
  • 请注意boost::variant 是一个只有头文件的库,所以如果你只使用boost::variant,你不需要担心构建/链接Boost 库。只需确保 boost 头文件的路径包含在您的项目/IDE/makefile 中即可。
  • @EvanTeran - 不受限制的联合可能更容易实现变体类型,但它们不能替代它们。

标签: c++ boost unions variant boost-variant


【解决方案1】:

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


编辑(四年后,2016 年): 在 C++17 中将有 std::variant。与boost::variant 相似但不相同。所以当你的编译器支持 C++17 的时候,你在标准库中就有了解决方案。

【讨论】:

【解决方案2】:

几年过去了:现在a proposal 即将推出。可能boost::variant 会变成 C++17!在那之前,我们将不得不与boost::variant 一起生活,这仍然很棒。注意std::variant中的细节会有一些变化。

更新:提案成功了。 std::variant 将成为新 C++17 标准的一部分。这是June 2016 meeting report by Herb Sutter。他在那里证实了这一点。

【讨论】:

  • 你能列出其中的一些变化吗?
  • 这些变化仍有可能发生变化。 ;) 一些变化是有争议的。它也不是表面上的,而是有一些复杂的设计决策。为了避免不必要地使答案复杂化,我选择简洁明了。一些问题可以在我的回答中的提案链接中找到。
【解决方案3】:

std::variant 现在正式成为 C++17 标准库的一部分! https://herbsutter.com/2016/06/30/trip-report-summer-iso-c-standards-meeting-oulu/

【讨论】:

    猜你喜欢
    • 2014-11-22
    • 2022-06-12
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多