私はシングルトンクラスFoo
を持っているとします。ここでの問題は、シングルトンのイディオムを実装する方法ではなく、次に明示的にはしません。私はそのような気にいらあります静的関数を持つシングルトンへのアクセス
class Foo
{
private:
Foo();
~Foo();
public:
void doSomething();
int getSomething() const;
public:
static Foo& getInstance();
};
をその後、私の心に、それを呼び出すための古典的な方法は以下の通りです:
Foo::getInstance().doSomething();
int i = Foo::getInstance().getSomething();
常にインスタンスにアクセスするためにFoo::getInstance()
を記述する必要がありますし、非常に迷惑なんだと予想されるタスクを実行します。私の質問は次のとおりです:どのような関数は、シングルトンメカニックを維持し、アクセスを短くする静的関数として重複?
class Foo
{
private:
Foo();
~Foo();
public:
void doSomething();
int getSomething() const;
public:
static Foo& getInstance();
static void _doSomething() { Foo::getInstance().doSomething(); }
static int _getSomething() { return Foo::getInstance().getSomething(); }
};
そして、私はこの短いバージョンでそれを呼び出すことができます。それは、共通の
Foo::_doSomething();
int i = Foo::_getSomething();
ですか?それをしない理由がありますか(なぜですか?)シングルトンクラスの呼び出しを単純化する他の(より良い)方法がありますか?
注:互換性の理由からC++ 11は使用しません。
あなたは 'auto&instance = Foo :: getInstance();のようなものを考えましたか? instance.doSomething(); instance.getSomething(); '? –
@FrançoisAndrieux:はい、もちろんです。シングルトンが同じスコープ内で複数回呼び出された場合は有効です。私はいくつかのスコープでの呼び出しについて考えます。しかしそれは良い点です。 – Caduchon
@FrançoisAndrieux 'auto'はOPが彼が使うことができないと言ったC++ 11キーワードです。 – muXXmit2X