2012-01-15 40 views
20

我试图让我的程序在不使用boost的情况下工作,但无法找到一些有用模式的替代方案。也就是说,在标准库中我找不到boost::optional这样的模式。是否有一些boost::optional(C++ 11或其他地方)的标准替代方案?boost :: C++标准库中的可选替代方案

+0

C++ 0x == C++ 11,从问题中删除。 :) – Xeo 2012-01-15 15:10:51

+1

您可以使用可空指针作为'boost :: optional'的廉价而不安全的替代方法。或者'std :: unique_ptr',其中值0(null_ptr,NULL)被解释为未初始化的可选类型。除了缺点,好处是你不需要实现任何东西;但请记住抽象。关于这一点的线索在boost手册中给出http://www.boost.org/doc/libs/1_53_0/libs/optional/doc/html/boost_optional/development.html#boost_optional.development.the_interface“作为结果,你可以在某些情况下用T *替换可选的,但并不总是“ – alfC 2013-05-10 08:43:44

回答

26

简短的回答:第

龙答:根据升压规范自己动手。文档非常详尽,代码并不复杂,但这仍然需要高于平均的C++技能。

要更新此答案:C++ 14不幸没有与std::optional一起发货。目前的提案(修订版5)为N3793,预计将作为单独的技术规范发布或成为C++ 17的一部分。

+12

在某些环境中,悲哀地使用提升在政治上是不可能的。 – 2012-01-15 17:51:16

+3

你有没有想过[只提取可选的提升](http://www.boost.org/doc/libs/1_53_0/tools/bcp/doc/html/index.html)? – Nova 2013-03-28 15:25:30

+3

为什么试图摆脱提升依赖关系?哦,让我算一下原因...... – einpoklum 2015-07-17 11:00:22

12

当前有a proposal for C++14(或C++ 17)。所以答案是(可能)还没有:)。

+4

显然,它刚刚被C++ 14投入技术规范(请参阅http://en.cppreference.com/w/cpp/utility/optional):( – Nova 2013-10-02 07:56:37

+1

C++委员会发言中的“投票”实际上是不是意味着“投票”? – 2015-07-30 15:57:32

2

pmr explained,现在是不可能的,并且直到C++ 17出现为止。

但是,你应该能够在github上使用这个single header library作为替代boost或std可选的下降。它没有依赖关系(除了支持C++ 11/C++ 14的编译器)。