0

ブーストヘッダーを含めるための公式のルール/ガイドラインはありますか?最近まで私はほとんどいつもフォーマットを使っていたのだろうかと思っています#include <boost/library.hpp>次に、 Boost.Timerに出くわしました。そのドキュメントには、非推奨のバージョンと新しいバージョンの2つのバージョンのライブラリがあると記載されています。

非推奨のバージョンはに<boost/timer.hpp>あり、新しいバージョンはにあります<boost/timer/timer.hpp>。2つのバージョンは、相互作用なしで存在しているようです...

だから私は、「明らかに、「内部」ヘッダーを好むべきだ」と思いました。そこで、より頻繁に使用するヘッダーのいくつかを調べたところ、たとえば、のヘッダーといくつかの外部依存関係<boost/format.hpp>が単純に含まれていることに気付きました。boost/formatしたがって、特定のヘッダーを含めることは最善のアイデアとは思えません。

だから私は、「おそらくそれは過渡的なアーティファクトであり、彼らはboost/library/header'計画に向かって取り組んでいる」と思いました。

新しいBoost.Atomicsライブラリ(最近追加されたばかり)に気づき、驚いた。ヘッダーboost/atomics.hppと同じ名前のヘッダーを持つフォルダーがある。

今、私は少し混乱しています:ヘッダーが公開されていると見なされる公式のガイドライン(標準のヘッダーと同様)と、APIの内部的な側面がどこから始まるかについての公式ガイドラインはありますか?それとも、ヘッダーの構造を決定するのは完全にライブラリ次第ですか?

4

1 に答える 1

0

私の知る限り、Boost ライブラリの要件とガイドラインでは、ヘッダー ファイルのスコープと分離が定義されていません。Boost ヘッダー ポリシーは、ヘッダーが他のヘッダーと共存できるようにするためのガイドラインを定義します。それにもかかわらず、ライブラリの多くは次のような違いを提供しています。

  • ユーザーが必要とする可能性のあるタイプ/機能の論理的な分割用に個別のファイルを提供します。
  • ライブラリ内のヘッダー ファイルをdetailディレクトリ内に配置します。
  • detail名前空間での内部型、関数などの宣言。

impl定義をディレクトリに配置することにより、関数宣言をヘッダーファイル内の定義から分離することにより、別のレベルの区別を行うものもあります。

最上位のヘッダー ファイルをインクルードしても安全であると考えられます。さらに、より具体的なファイルを含めることは一般的に安全です。例えば:

  • boost::threadboost::mutex、およびが必要な場合boost::lock、または追加のインクルードを気にしない場合は、 を含めることができますboost/thread.hpp
  • のみが必要な場合はboost::thread、 を含めますboost/thread/thread_only.hpp。私は直接含めませんboost/thread/detail/thread.hpp
于 2013-03-08T19:55:43.603 に答える