假设我有这个简化的示例:
我有一些代码可以对类进行序列化和反序列化...
第一个字节是编码类类型的枚举(它们都继承自相同的基类)..
例如。
Color* c;
auto classType == read_byte(buffer);
switch (classType)
case eBlue:
{
c = new Blue(buffer);
}
case eGray:
{
c = new Gray(buffer)
}
//...
有什么办法可以有一个从枚举到类型的映射,这样我就可以替换开关
c = new enum2Type(buffer);
编辑 ofc 我永远不会使用原始 ptr IRL。:)
最佳答案
template<typename T>
T* makeColor(Buffer const& buffer)
{
return new T(buffer);
}
...
std::map<ColerEnum, Color* (*)(Buffer const&)> m;
m[grayEnum] = makeColor<Gray>;
...
Color* c = m[typeByte](buffer);
关于c++ - 是否可以将 int(enum) 映射到类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16691214/