C++11标准是否提供类似于boost::any的东西?

22
例如,boost::function 几乎完全转移到了 std::function,同样的情况也发生在 boost::shared_ptr 上。
但是我找不到 std::any? 它是否被重命名或由于某些原因根本没有放置在新标准中?

13
不。 - R. Martinho Fernandes
Boost 中并非所有内容都已移至 std,但这并不妨碍您在 Boost 中使用它。我猜测一些 Boost 库可能会被重写为 C++11,有些则可能完全被删除,因为它们相当冗余,尽管它们可能仍然可用于向后兼容性。 - CashCow
4个回答

23

自从这个问题被问出来后,我们已经向std :: experimental :: any迈进,作为C ++ 14标准投票通过的可选功能。

至少在GCC 5.1中,它被实现

自那时起,该功能已在C ++ 17中标准化,导致std :: any 。另请参见C ++ 17的std :: variant ,用于类型安全的联合体,其中包含一种有限的已知类型替代方案,或为空(感谢remy-lebeau提供的提示)。


3
类似于boost::variantstd::variant已经被标准化,并将出现在C++17中。 - Remy Lebeau

16

并非boost的每个库都能够进入标准库(即使成功被纳入的库中也可能会删除某些组件)。一般来说,当委员会考虑添加标准库内容时会非常保守(因为如果错误地将某个元素包含进去,那么很难在以后删除它,例如因为有更好的替代品)。

boost::functionboost::shared_ptr很有可能被包括在内,因为它们已经是tr1的一部分了。但是,boost::any没有被纳入标准库。然而,它可能会在以后的标准库中被包括进去(例如在下一个技术报告中,可以查看这里)。尽管拥有boost::any很不错,但我不认为它像shared_ptr那么重要。

总之:boost::any不是C++11的一部分,因为委员会认为没有迫切需要将其包含进去


8
也许您可以更新您的答案以反映17个变化 :) - Abhinav Gauniyal

8

3

我认为默认情况下,除非提交并经过委员会通过,否则新标准中不会包含库。

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

我的猜测是,在C ++11中,boost库将被重写,一些库可能会被视为冗余,而其他的则会改用移动语义、初始化列表和auto等C++11特性以C++11风格进行编写。

很可能新的库都是基于C++11的,但现有的boost软件包仍将作为可用状态保留一段时间,因为许多人尚未切换到C++11编译器。 我还猜测,只有所有主要编译器实现的C++11特性才会首先进入软件包。

这可能更适合程序员而不是stackoverflow,甚至更适合comp.std.c++.moderated和boost邮件列表。


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