それは私ですか、それとも C++ でのオブジェクト指向パラダイムの実装にクラス名前空間の概念がありませんか?
これが私が意味することの例です:
ドキュメント { ヘッダー {} 本文 {} フッター {} }
ドキュメントは、ヘッダー、ボディ、およびフッターを持つことができるオブジェクトです。
そのようなオブジェクトとその要素を外部名前空間からアドレス指定する簡単な方法は次のとおりです。
- 書類
- ドキュメント::ヘッダー
- ドキュメント::本文
- ドキュメント::フッター
Document クラスの定義に制限を課すことなく、C++ でそのような命名構造を実現する方法はありますか?
1) 名前空間ドキュメント { ... }
このケースでは、独自の名前空間内にオブジェクト クラスが必要であり、Document::Document の使用は冗長で意図的ではないようです。
2) 名前空間 Document { class ... } typedef Document::Document document;
この場合、ドキュメントと Document::{part} が与えられますが、センシティブな言葉が奇妙で無関係に見える場合があります。
3) クラス ドキュメント { クラス ... };
この場合、ネストされたすべてのクラスの定義に Document ヘッダーを含める必要があり、最終的なオブジェクトをその部分の派生物にすることはできません。それらは独自のスコープ内で定義されているためです。
4) クラス ドキュメント { クラス ... }; クラス ドキュメント : 公開ドキュメント {}
このケースは意図したものに近いですが、余分なクラスと継承が必要です。
!) 理想的には、私が持ちたいのは
namespace class Document {
class Header;
class Body;
class Footer;
class Document; // linked with the parent namespace as with its own name space
}
Document doc; // ok, resolves Document as a class
Document::{Part} docPart; // ok, resolves Document as namespace
.) 不当な追加費用なしで意図したことを達成するための合理的な方法は他にありますか?
また、なぜそのような些細なことを行うのが標準的な方法ではないのか、正確にはわかりません。:/ 特定の理由はありますか?
--- 明確化 ---
提起された問題のいくつかに対処するために、
「何の役に立つの?」1) 平易な言語 2) 言語構造からオブジェクトの抽象モデルへの透明なマッピング、およびその逆。
「なぜ部品から物を導き出そうとするのでしょうか?」オブジェクトによって導入されたすべてのエンティティがその一部である必要はありません。たとえば、それはその本質である可能性があります。例えば:
ドキュメント { スケルトン{} パーツ { ヘッダー {} ボディ {} フッター {} } }
--- 抽象的なフレームワーク ---
オブジェクトは、その定義が外部シンボルを使用し、独自の論理エンティティの定義とともにいくつかの独自のシンボルを導入する可能性があるモジュールと考えてください。
- - 点 - -
モジュール全体がオブジェクトの定義です。追加の言語的な嘲笑なしにそのまま使用できるとよいでしょう。
===解像度===
ご意見ありがとうございます。
C++ で名前空間名をクラスにリンクする方法ができるまでは、
ObjectName { ... Object {} } -> ObjectName ::Object, ObjectName :: Part
このような場合に構築します。私が望むほど短くはないかもしれませんが、少なくとも十分に透過的で、追加コストがなく、前方宣言で使用できます。