別のクラスの単一のインスタンスを共有する必要がある複数のクラスがあります。公的には、このクラスが存在することは不明です。次のようなことをするのは適切ですか?(書かれたとおりにテストされました)
#include <iostream>
class hideme
{
private:
int a;
public:
void set(int b) { a = b; }
void add(int b) { a += b; }
int get() { return a; }
hideme() : a(0) { }
};
class HiddenWrapper
{
protected:
static hideme A;
};
hideme HiddenWrapper::A;
class addOne : public HiddenWrapper
{
public:
void add() { A.add(1); }
int get() { return A.get(); }
};
class addTwo : public HiddenWrapper
{
public:
void add() { A.add(2); }
int get() { return A.get(); }
};
int main()
{
addOne a;
addTwo b;
std::cout << "Initialized: " << a.get() << std::endl;
a.add();
std::cout << "Added one: " << a.get() << std::endl;
b.add();
std::cout << "Added two: " << b.get() << std::endl;
return 0;
}
価値があるのhideme
は、私がファサードを設計しようとしているライブラリの一部であり、他のクラスには、静的と相互作用するライブラリのメンバーがありますhideme
。
さらに、作成されたヘッダーファイルにHiddenWrapper
対応するソースファイルがない場合、静的メンバーを定義するのに最適な場所ですか?インクルードガード付き。
この問題を解決する他の方法はありますか?私が想像できる限り(それほど遠くはありませんが)、それ以外の場合は友情でしか解決できませんでしたが、私は警戒しています。