是否可以将int(enum)映射为类型
Is it possible to map int(enum) to type
假设我有这样一个简化的例子:
我有一些代码对一个类进行序列化和反序列化…第一个字节是编码类类型的enum(它们都继承自相同的基)..如:
Color* c;
auto classType == read_byte(buffer);
switch (classType)
case eBlue:
{
c = new Blue(buffer);
}
case eGray:
{
c = new Gray(buffer)
}
//...
是否有办法从enum映射到类型,这样我就可以替换switch
c = new enum2Type(buffer);
我永远不会使用原始的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);
您可以使用带缓冲区参数的函数函数映射或数组替换switch case,返回指向Color
的(智能)指针:
enum EnumType { blueEnum, grayEnum };
struct Buffer { .... };
struct Color { .... };
template <typename T>
Color* make_stuff(const Buffer& b) { return new T(b); }
然后#include <functional>
#include <map>
...
// if you are sure enum values start at 0 and increase withoug jumps,
// you could use a plain array
std::map<EnumType, std::function<Color*(const Buffer&)>> m;
m[grayEnum] = make_stuff<Gray>;
m[blueEnum] = make_stuff<Blue>;
Color* c = m.at(classType);
相关文章:
- 值到类型的运行时映射
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 如何将高维数据映射到特征类型?
- 如何使映射键具有两种不同的数据类型?
- 值和类型的简洁双向静态 1:1 映射
- 当 map 是一个整数数组并且由 operator[] 创建时,它是否初始化其映射类型
- 编译按映射类型获取元素的映射错误元组
- 模板.参数包扩展 - 重映射类型
- C++函数来返回基于参数的比较器通用映射类型?
- ATL ActiveX DLL 作为映射类型图像和数据加载了两次
- 如何在 C++ 中获取映射类型指针,映射
- 映射类型为的队列容器
- 如何使用boost::mutex作为std::map中的映射类型
- 正向声明映射的映射类型和C++11
- std::map何时调用映射类型的构造函数
- 基于映射类型c++解析和转换csv
- 模板类的映射类型签名(声明)
- c++映射类型的属性
- 使用映射类型会产生GCC错误:预期的未限定id在' for '之前
- 在 EIGEN 中单独声明和初始化映射类型矩阵