今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

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 のクライアントもこれをインクルードする。