C++の名前空間に関するアドバイス
質問
私はちょうど C++ の名前空間を独学しているところです (C# のバックグラウンドから来ました)。そして、C++ が他のほとんどの言語よりも優れているすべての事柄について、入れ子の名前空間はそれらのうちの 1 つではない、と本当に思い始めています!
ネストされた名前空間を宣言するために、次のことをしなければならないと考えていて正しいでしょうか。
namespace tier1
{
namespace tier2
{
namespace tier3
{
/* then start your normal code nesting */
}
}
}
とは対照的です。
namespace tier1::tier2::tier3
{
}
à la C#?
これはforward宣言が必要なときにさらに頭が悪くなりますね。
namespace tier1
{
namespace tier2
{
namespace forward_declared_namespace
{
myType myVar; // forward declare
}
namespace tier3
{
/* then start your normal code nesting */
class myClass
{
forward_declared_namespace::myType myMember;
}
}
}
}
私が開発する典型的なシステムは、以下のように構成されていることを念頭に置いてください。
MyCompany::MySolution::MyProject::System::[PossibleSections]::Type
C++の例で名前空間があまり使われていないのはこのためでしょうか?あるいは、通常は単一の (ネストされていない) 名前空間のみですか?
アップデイト
ご興味のある方はどうぞ。 はこのようになりました。 に取り組むことになりました。
どのように解決したのですか?
C++ の名前空間は設計メカニズムとして意図されたものではなく、単に名前の衝突を防ぐために存在するものです。99.99% の状況では、ネストされた名前空間を使用したくない、または使用する必要はありません。
C++ における名前空間の正しい使い方の良い例は、C++ 標準ライブラリです。この非常に大きなライブラリ内のすべてのものは、と呼ばれる単一の名前空間に配置されています。 std - このライブラリを(例えば)I/O サブネーム空間、数学サブネーム空間、コンテナサブネーム空間などに分割する試みや必要性はありません。
C++でモデリングするための基本的なツールはクラス(とある程度テンプレート)であり、名前空間ではありません。ネストの必要性を感じるのであれば、ネストされたクラスの使用を検討すべきであり、それは名前空間よりも以下の利点があります。
- メソッドを持つ
- アクセスを制御することができる
- 再オープンできない
これらを考慮した上で、もしまだネストされた名前空間を使いたいのであれば、ぜひそうしてください。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] C++でネストした名前空間をヘッダで表現する良い方法はありますか?