我会将数百个类的问题简化为两个,并尝试解释我的意思:
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 的值来实例化对象。我只是觉得 switch-case 并不是 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;