私はC ++からJavaとC#に切り替えて、名前空間/パッケージの使用法がはるかに優れていると思います(適切に構造化されています)。次に、C ++に戻って、同じ方法で名前空間を使用しようとしましたが、必要な構文がヘッダーファイル内でひどいものでした。
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
次も私には奇妙に思えます(深いインデントを避けるため):
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
上記のものを表現する短い方法はありますか?のようなものがありません
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
更新
OK、Java / C#とC ++での使用の概念が異なると言う人もいます。本当に?名前空間の目的は、(動的)クラスローディングだけではないと思います(これは、非常に技術的に合理的な観点です)。読みやすさと構造化のためにそれを使用してはいけないのはなぜですか。たとえば、「IntelliSense」について考えてください。
現在、名前空間とそこにあるものの間にロジック/接着剤はありません。JavaとC#の方がはるかに優れています...なぜ<iostream>
名前空間を含めて持つのstd
ですか?わかりました、ロジックがインクルードするためにヘッダーに依存する必要があると言うなら、なぜ#includeは、#include <std::io::stream>
またはのような "IntelliSense"フレンドリーな構文を使用しないのですか?<std/io/stream>
ですか?デフォルトのライブラリに欠けている構造化は、Java / C#に比べてC ++の弱点の1つだと思います。
激しい競合に対する一意性が1ポイント(C#とJavaのポイントでもある)である場合、プロジェクト名または会社名を名前空間として使用することをお勧めしますか?
一方では、C ++が最も柔軟であると言われています...しかし、誰もが「これを行わないでください」と言いましたか?C ++は多くのことを実行できるように思えますが、C#と比較して多くの場合、最も簡単なことでも構文は恐ろしいものです。
アップデート2
ほとんどのユーザーは、2つのレベルよりも深い入れ子を作成するのはナンセンスだと言っています。では、Win8開発でのWindows :: UI :: XamlおよびWindows :: UI :: Xaml :: Controls :: Primitives名前空間はどうでしょうか。Microsoftの名前空間の使用は理にかなっており、実際には2つのレベルよりも深いと思います。大きなライブラリ/プロジェクトにはより深い入れ子が必要だと思います(ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpaceなどのクラス名は嫌いです...そして、すべてをグローバル名前空間に入れることもできます)。
アップデート3-結論
ほとんどの場合「それをしないでください」と言いますが、... boostでさえ、1つまたは2つのレベルよりも深い入れ子を持っています。はい、それはライブラリですが、再利用可能なコードが必要な場合-自分のコードをライブラリのように扱って、他の人に譲ってください。名前空間を使用して、検出目的でより深い入れ子を使用しています。
namespace
キーワードの乱用ですか?