【问题标题】:Does C++11 standard provide something like boost::any?C++11 标准是否提供类似 boost::any 的东西?
【发布时间】:2012-02-08 14:19:36
【问题描述】:

例如,boost::function 几乎全部移动到 std::functionboost::shared_ptr 也是如此

但是我找不到std::any? 是改名了还是根本没有放在新标准中?

【问题讨论】:

  • 没有。 (和填充物)
  • 并非 boost 中的所有内容都已移至 std,但没有什么能阻止您在 boost 中使用它。我猜一些 boost 库可能会为 C++11 重写,一些可能会被完全删除,因为它们是相当多余的,尽管它们可能仍可用于向后兼容。

标签: c++ c++11 boost boost-any stdany


【解决方案1】:

自从提出问题以来,我们将 std::experimental::any 作为 optional 功能推进到 C++14 标准之外。

当时至少在 GCC 5.1 中是 implemented

从那时起,该功能在 C++17 中标准化,产生了std::any。另请参阅 C++17 的 std::variant 以获取类型安全联合,该联合要么包含有限的已知类型替代之一,要么为空(感谢 remy-lebeau 的提示)。

【讨论】:

  • std::variant(类似于boost::variant)也已经标准化,将出现在C++17中。
【解决方案2】:

并非 boost 中的每个库都将其纳入标准(甚至那些可能已删除组件的库)。一般来说,委员会在向标准库中添加内容时非常保守(因为如果包含错误(例如,因为有更好的选择),以后几乎不可能删除某些内容)。

boost::functionboost::shared_ptr 几乎可以包含在其中,因为它们已经是 tr1 的一部分。另一方面,boost::any 没有成功。但是,它可能会在稍后包含在标准库中(例如,在下一个技术报告中,请参阅 here)。虽然 boost::any 很高兴拥有,但我不会认为它像例如一样重要。 shared_ptr.

结论:boost::any 不是 C++11 的一部分,因为委员会认为没有任何迫切需要包含它

【讨论】:

  • 也许您可以更新您的答案以反映 17 项更改 :)
【解决方案3】:

Std::any 最近被 c++17 标准接受:

http://en.cppreference.com/w/cpp/utility/any

【讨论】:

    【解决方案4】:

    我认为默认的立场是,一个库不会被包含在新标准中,除非它被提交并通过委员会。

    我不确定 boost::any 是否曾经提交过。可能不是。但是你仍然可以使用 boost::any。

    我的猜测是 C++11 的 boost 库将被重写,一些将被认为是多余的,而另一些将被更改为使用移动语义、初始化列表和自动,因此使用 C++ 以 C++11 风格编写11个特点。

    很可能新库都将使用 C++11,但现有的 boost 包将在未来一段时间内保持可用,因为许多尚未切换到 C++11 编译器。我也猜想,只有所有主要编译器实现的 C++11 的功能才会首先进入包中。

    这对于程序员来说可能比 stackoverflow 更多,对于 comp.std.c++.moderated 和 boost 邮件列表来说甚至更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 2015-03-12
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多