例如boost::function
几乎全部移至std::function
,与boost::shared_ptr
但我找不到std::any
?
是重命名还是根本没有以新标准放置?
答案 0 :(得分:16)
自提出问题以来,我们向std :: experimental :: any推进了以C ++ 14标准投票的optional功能。
至少在GCC 5.1中是implemented。
此后,该功能在C ++ 17中标准化,产生std::any。另请参阅C ++ 17的std::variant,了解一个类型安全联合,它可以包含一个有限的已知类型替代,也可以为空(感谢remy-lebeau提示)。
答案 1 :(得分:15)
并非每个来自boost的库都会使其成为标准(甚至那些可能删除了组件的库)。一般来说,对于添加到标准库中,委员会是相当保守的(因为如果包含是错误的话,以后几乎不可能删除某些内容(例如,因为有更好的选择))。
boost::function
和boost::shared_ptr
,因为它们已经成为tr1
的一部分,因此几乎可以包含在内。另一方面,boost::any
没有削减。但是,它可能会在稍后的时间点包含在标准库中(例如,在下一个技术报告中,请查看here)。虽然boost::any
很好,但我不会认为它与shared_ptr
。
总结: boost::any
不是C ++ 11的一部分,因为委员会认为没有迫切需要包含它
答案 2 :(得分:4)
std :: any最近被接受为c ++ 17标准:
答案 3 :(得分:3)
我认为默认的立场是新标准中不会包含图书馆,除非它被提交包含然后通过委员会。
我不确定是否曾提交过boost :: any。可能不是。但是你仍然可以使用boost :: any。
我的猜测是,C ++ 11的升级库将被重写,一些将被视为冗余,其他将被更改为使用移动语义,初始化列表和auto,因此使用C ++以C ++ 11风格编写11个功能。
很可能新的库都将在C ++ 11中,但现有的boost包将在未来一段时间内保持可用,因为许多人还没有切换到C ++ 11编译器。我还猜测,只有所有主编译器实现的C ++ 11的功能才会首先进入包中。
对于程序员而言,这可能比stackoverflow更为一个问题,对comp.std.c ++。moderated和boost邮件列表来说更好。