0

私は現在、私の (妥当な) 大きなライブラリを太すぎないようにするにはどうすればよいかを考えています。

このライブラリのユーザーに対して物事を明確にする必要があることは理解していますが、名前空間が適切な解決策になるかどうかは疑問です。

namespace1::namespace2::namespace3::SomeClass myObject* = new namespace1::namespace2::namespace3::SomeClass();

この C++ 機能は、コミュニティで一般的にどのように使用されていますか?

ライブラリ全体の単一の名前空間 + クラスの命名規則、または doxygen ドキュメントの \addtosection の方がよいでしょうか?

4

3 に答える 3

2

ライブラリ全体に対して単一の名前空間でしょうか?

名前空間の主な目的は、類似したシンボル名の問題と、結果として生じるシンボル名の衝突を回避することです。
ライブラリと意味のある指示的なクラス名に対して単一の名前空間を使用する方がはるかに優れています。

いつでも使えますが、

なんらかの理由で回避できないネストされた名前空間がある場合。

于 2012-10-04T10:16:37.840 に答える
1

名前空間のエイリアスを使用すると、深い名前空間レベルをきれいに作成できるため、これはあまり問題にはなりません。これは、クラス名の前にモジュール名を付ける命名規則ではできないことでもあります。

私は、doxygen の組織は実際の命名と直交していると考えています。コードに明確なインクルード依存関係がない場合は、doxygen グループが最適です。それ以外の場合は、ファイル レベルのドキュメントとファイル階層のガイドを dox​​ygen ページの形式で提供します。そうすれば、手動でグループ化する必要がなくなり、同時にインクルードのサニティ チェックも行うことができます。

于 2012-10-04T10:17:35.093 に答える
0

これは、Boost で使用されるアプローチです。ただし、Boost はライブラリのコレクションであり、それぞれが独自の名前空間内にあります。

関数内では、ディレクティブを使用してusing、必要に応じて物事を少し軽くすることができusing namespace std::placeholdersますusing std::placeholders::_1.

または、名前空間エイリアスを使用できます: namespace ns = name1::name2::name3.

最善の全体的な方法は、相互にほとんど仮定しないいくつかの小さな独立したライブラリを作成し、それらに異なる名前空間を与えることです。これが不可能な場合は、一般的な設計を確認することをお勧めします。

于 2012-10-04T10:16:22.653 に答える