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

时间:2012-02-08 14:19:36

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

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

相同

但我找不到std::any? 是重命名还是根本没有以新标准放置?

4 个答案:

答案 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::functionboost::shared_ptr,因为它们已经成为tr1的一部分,因此几乎可以包含在内。另一方面,boost::any没有削减。但是,它可能会在稍后的时间点包含在标准库中(例如,在下一个技术报告中,请查看here)。虽然boost::any很好,但我不会认为它与shared_ptr

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

答案 2 :(得分:4)

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

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

答案 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邮件列表来说更好。