例如boost::function
几乎完全移至std::function
,与boost::shared_ptr
但是我找不到std::any
?它是重新命名还是根本没有以任何理由置于新标准中?
自从提出问题以来,我们将 std::experimental::any 作为一项 从 C++14 标准中投票选出的可选功能。
然后至少在 GCC 5.1 中实现了它。
从那时起,该功能在 C++17 中标准化,产生了std::any。另请参阅 C++17 的std::variant以获取类型安全的联合,该联合要么包含有限的已知类型替代方案之一,要么为空(感谢 remy-lebeau 的提示)。
并非来自 boost 的每个库都使其成为标准(甚至那些可能已删除组件的库)。一般来说,委员会在向标准库添加内容时非常保守(因为如果包含错误(例如,因为有更好的选择),以后几乎不可能删除某些内容)。
boost::function
并且boost::shared_ptr
几乎可以包含在内,因为它们已经是tr1
. boost::any
另一方面没有晋级。然而,它可能会在稍后包含在标准库中(例如,在下一个技术报告中,请看这里)。虽然boost::any
很高兴,但我不会认为它像 eg 一样重要shared_ptr
。
结论:boost::any
不是 C++11 的一部分,因为委员会认为没有任何迫切需要包含它
Std::any 最近被 c++17 标准接受:
我认为默认的立场是图书馆不会被包含在新标准中,除非它被提交包含然后通过委员会。
我不确定 boost::any 是否曾经提交过。可能不是。但是你仍然可以使用 boost::any。
我的猜测是,随着 C++11 的提升库将被重写,一些将被认为是多余的,而另一些将被更改为使用移动语义、初始化列表和自动,因此以 C++11 风格编写,具有 C++11 特性。
最有可能的新库都将使用 C++11,但现有的 boost 包将在未来一段时间内保持可用,因为许多尚未切换到 C++11 编译器。我还猜想,只有所有主要编译器实现的 C++11 的功能才会首先进入包中。
对于程序员来说,这可能比 stackoverflow 更像一个问题,对于 comp.std.c++.moderated 和 boost 邮件列表来说甚至更好。