6

何百ものクラスの問題を 2 つに単純化して、私が何を意味するかを説明しようとします。

class Base {
};
class A: public Base {
};
class B: public Base{
};

static Base* foo (int bar){

    switch (bar) {
        case 0:
            return new A();
            break;              
        case 1:
            return new B();
            break;
        default:
            return new Base();
    }
}

bar の値に応じてオブジェクトをインスタンス化したい。私は、スイッチケースは、C ++でより多くの継承者に対してそうするための最良の方法ではないと感じていますBase

編集:std::map私がこれを思いついたアプローチに行く:

struct Dictionary {
    typedef Base* (Dictionary::*FunctionPointer)(void);
    std::map <int, FunctionPointer> fmap;

    Dictionary() {
        fmap.insert(std::make_pair(0, new A()));
        fmap.insert(std::make_pair(1, new B()));
    }

    Base* Call (const int i){
        FunctionPointer fp = NULL;
        fp = fmap[i];
        if (fp){
            return (this->*fp)();
        } else {
            return new Base();
        }
    }
};

static Dictionary dictionary;
4

1 に答える 1