3

実行時に決定するが、特定のクラスをサブクラス化することがわかっているクラスから静的メソッドを呼び出したいと思います。だから私はこれらのクラスを持っているとしましょう

class super {
    public:
    super();
    static super *loadMe (ifstream &is);
}

class subA : public super {
   public:
   subA();
   static super *loadMe (ifstream &is);
}

class subB : public super {
   public:
   static super *loadMe (ifstream &is);
   private:
   subB();
}

そして、実行時に(ファイルの内容に基づいて)次にsubAとsubBのどちらをロードするかを決定したいとします。これを行う1つの方法は、空のオブジェクトを使用してメソッドを呼び出すことです。

super getLoadType (ifstream &is) { if(complicatedFunctionOfIs(is)) return subA(); return subB()}

super *newObj = getLoadType(is).loadMe(is);

しかし、subBの引数なしのコンストラクターをプライベートにしたので、ここではそれを行うことができません。しかし、実際にはスーパーオブジェクトは必要ありません。スーパーサブクラスのクラスタイプだけが必要です。それで、それを変数として表す方法はありますか?

編集:この場合、関数ポインターを返すことができることは承知していますが、複数の静的関数を呼び出す必要がある可能性がある、より複雑な例を検討しています。

4

1 に答える 1

9

ファクトリパターンを確認することをお勧めします。プラグインアーキテクチャを設計している場合は、目的のファクトリへのポインタを返す関数を簡単に作成できます。その後、ポリモーフィズムが残りの作業を行います。

于 2010-10-28T13:11:59.470 に答える