【发布时间】:2016-12-20 12:47:27
【问题描述】:
我有一个 xml,我从其中读取需要创建的对象的类型,问题在于如何在不使用 switch/if 语句的情况下传递枚举。
enum ObjectType {A,B,C};
void parseXML(const string& fileName)
{
//Open-read file etc...
ObjectType objType = xmlObject.type(); <- the structure provided from the xml parser that I use(codesynthesis)
ObjectParameters params = gatherParameters(xmlObject);
auto createdObj = factory.createObject<objType>(params);
^^^^^
}
需要一个常量表达式,所以我必须映射提供的类型还是有更快的方法? 如果是这样,有没有办法将枚举用作类的标记/同义词?
【问题讨论】:
-
你投了吗?
-
如果
createObject的模板类型需要创建对象的类型,那么您将需要一个开关来将enum映射到一个类型。 -
@ShikatsuKagaminara 是的,它也需要一个常量表达式,因为我在括号中使用了 givenObjectType
-
通常的方式是将枚举作为参数传递,并让函数根据开关或带有注册对象的映射返回一个对象。现在您需要由编译时多态性处理的运行时多态性。