2012-01-15 17 views
20

私のプログラムはboostの使用なしで動作させようとしていますが、便利なパターンの代替を見つけることはできません。つまり、標準ライブラリにboost::optional -likewiseパターンが見つかりません。 boost::optional(C++ 11または他のどこか)の標準的な代替手段がありますか?C++標準ライブラリのboost :: optional alternative

+0

C++ 0x == C++ 11、質問から削除されました。 :) – Xeo

+1

'boost :: optional'の代わりに安価で安全でないものとしてヌル可能なポインタを使うことができます。または、おそらく 'std :: unique_ptr'を返します。値0(null_ptr、NULL)は初期化されていないオプション型と解釈されます。欠点に加えて、良いことは何も実装する必要はないということです。ただ抽象を覚えておいてください。これに関するヒントは、ブーストマニュアル自体に記載されています。http://www.boost.org/doc/libs/1_53_0/libs/optional/doc/html/boost_optional/development.html#boost_optional.development.the_interface "結果として場合によってはをT *で置き換えることができますが、必ずしもそうではありません。「 – alfC

答えて

26

短い回答:いいえ

長い答え:自分のロールをブースト仕様に従ってください。ドキュメントはかなり網羅的で、コードはそれほど複雑ではありませんが、それでもなお平均的なC++スキルが必要です。

この回答を更新するには、C++ 14は残念ながらstd::optionalと同梱されていません。現在の提案(改訂5)はN3793であり、別の技術仕様として出荷される予定であるか、C++の一部となる予定です17。

+12

」環境によっては、悲しいことにブーストを使用することは政治的に不可能です。 –

+3

[boost from optional](http://www.boost.org/doc/libs/1_53_0/tools/bcp/doc/html/index.html)について考えましたか? – Nova

+3

なぜブースト依存関係を取り除こうとしていますか?ああ、理由を数えてみましょう... – einpoklum

12

現在、a proposal for C++14(またはC++ 17)があります。答えは(おそらく)まだありません。

+4

明らかにC++ 14を技術的仕様(http://en.cppreference.com/w/cpp/utility/optional参照):( – Nova

+1

C++委員会で「投票する」というのは実際には「投票する」という意味ですか? –

2

pmr explainedのように、現時点では不可能であり、C++ 17がリリースされるまではありません。

しかし、このsingle header libraryをgithubに追加すると、boostまたはstdの代わりにオプションとしてドロップすることができます。依存関係はありません(C++ 11/C++ 14対応コンパイラを除く)。

関連する問題