【发布时间】:2013-07-19 16:36:31
【问题描述】:
寻找一种方法来避免大量 IF/ELSE 并使用查找表将字符串解析为特定类以进行实例化,这些类都派生自基类。 这样的事情可能吗?如果可以,怎么做?
typedef struct BaseClass
{
} BaseClass;
typedef struct DerivedClassOne : BaseClass
{
} DerivedClassOne;
typedef struct DerivedClassTwo : BaseClass
{
} DerivedClassTwo;
typedef struct
{
const char *name;
BaseClass class;
} LookupList;
LookupList list[] = {
{"ClassOne", DerivedClassOne},
{"ClassTwo", DerivedClassTwo}
};
BaseClass *InstantiateFromString(char *name)
{
int i;
for (i = 0; i < 2; i++)
{
if (!strcmp(name, list[i].name))
return new list[i].class();
}
}
int main (int argc, char *argv[])
{
BaseClass *myObjectFromLookup = InstantiateFromString("ClassOne");
}
【问题讨论】:
-
你不需要在 C++ 中使用
typedef class,只是这样你就知道了。 -
为什么不改用
std::map<std::string, factory>(当然,factory是适当工厂函数的原型)。重点是,不要使用 C 风格的字符串和线性搜索,使用适当的类。
标签: c++