C++に悩む
Javaで書くところの以下のコードは、C++ではどう書けばいいんでしょう?
class Capsuled { // package private public static final int HOGE = 1; } public class Facade { public static final int HOGE = Capsuled.HOGE; }
要点は、
- Facade クラスがはドメインにアクセスするための唯一のクラス
- Capsuled クラスは外部から隠蔽したい
- Capsuled クラスで定数を定義したい
- Facade クラスで Capsuled クラスで定義した定数を再定義したい
- クライアントから int v = Facade::HOGE; のように定数にアクセスしたい
といったところです。
誰か教えてくだされ。
以下、オブジェクトの広場MLからの情報。
C++ の最新の言語仕様では以下のような書き方が可能とのこと。VC++6.0 は未対応の模様。(最新のgccなら対応しているかなぁ)
class Capsuled { static const int HOGE = 1; };
ここで定義した定数を以下のように参照可能かどうかは不明。
#include "Capsuled.h" class Facade { static const int HOGE = Capsuled::HOGE; };
時間がもったいないので、以下の方法で解決。
hoge.h を作る。
#define HOGE 1
Capsuled.h/Capsuled.cpp/Facade.h/Facade.cpp でこれをインクルードする。
Facade のクライアントもこれをインクルードする。