2012-01-15 68 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的編譯器)。