2013-06-07 6 views
6

私にはC++ projectがあります。私はC++で半現実的なプログラムを構築することについて自分自身を教えるためにプロジェクトに取り組んでいます。それはウェブサイトから再帰的にコンテンツをダウンロードする。C++オプションオブジェクトの表現

各ダウンロードには、ダウンロードするコンテンツのURLと、参照元のURL(またはコンテンツが抽出されたページのURL)があります。

最初のURLでない限り、常に参照元があります。私は不正行為をしていただけで、最初のURLをそれ自体の参照元として扱っていました。最近、URLクラスを空白(または空)の表現に変更しました。これはハックのように感じる。

Cでのオプションのオブジェクトを表現する方法がなくて++あり:

  • のポインタを使用していますか?
  • 無効なオブジェクトのスペースを浪費していますか?
  • または「空白」のオブジェクトを作成していますか?
+0

W \ O:ポインタを使用していますか? IMHOはありません。 – Najzero

答えて

5

boost :: optionalを使用できます。ブーストは尊重された第三者図書館です。多くの場合、新しいstl関数のプロトタイプと見なされます:Ralphの答えstd :: optionalは新しいC++で利用可能です。

は、あなたがC++ 14コンパイラを持っている場合、std::optionalテンプレートを使用しhttp://www.boost.org/

+0

私はもともとこれをコメントとして投稿しましたが、 "空白"バージョンのスペースを無駄にしませんか?私はそれが深刻な問題だとは思わないが、それは質問の特定の要件の一つである。 – BoBTFish

+2

番号boost :: optionalは、その実装において適切な場合にNULLに設定されたポインタを使用します。どのようにstd :: optionalが動作するのかわかりません。 – Bathsheba

+0

@Bathsheba私は、確立された慣習を改革することを避けようとしています。私は 'unique_ptr'を使用しましたが、コードが片側に見えるようにしました。私は、「このフィールドはオプションです」と明示的に言っていないと感じました。代わりに、メモリ管理技術のように見えました。 –

5

を参照してください。そうでない場合は、boost::optionalまたはstd::unique_ptrを使用できます。ポインタを使用することと、無効なオブジェクトにスペースを無駄にすることの両方を避けることはできません。 std::optionalにはオプションのオブジェクトが含まれますが、std::unique_ptrは明らかにそれを指し示します。

+0

+1あなたのためにRalph:私は本当に新しいC++に移行する必要があります;-) – Bathsheba