20

例如boost::function几乎完全移至std::function,与boost::shared_ptr

但是我找不到std::any?它是重新命名还是根本没有以任何理由置于新标准中?

4

4 回答 4

18

自从提出问题以来,我们将 std::experimental::any 作为一项 从 C++14 标准中投票选出的可选功能。

然后至少在 GCC 5.1 中实现了它。

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

于 2015-06-09T16:46:02.550 回答
16

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

boost::function并且boost::shared_ptr几乎可以包含在内,因为它们已经是tr1. boost::any另一方面没有晋级。然而,它可能会在稍后包含在标准库中(例如,在下一个技术报告中,请看这里)。虽然boost::any很高兴,但我不会认为它像 eg 一样重要shared_ptr

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

于 2012-02-08T14:43:52.257 回答
7

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

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

于 2016-10-12T06:49:22.403 回答
3

我认为默认的立场是图书馆不会被包含在新标准中,除非它被提交包含然后通过委员会。

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

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

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

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

于 2012-02-08T14:48:11.233 回答