映射/联接两个自动生成的枚举的最佳方式
Best way to map/join two autogenerated enums
从
自动生成的类中加入两个枚举的最佳C++(不是C++11)方法是什么,如下所示:
namespace A {
namespace B { ...
class CarInfo {
public:
enum State { // basically same enums defined in different classes
Running,
Stopped,
Broken
};
};
class BikeInfo {
public:
enum State { // basically same enums defined in different classes
Running,
Stopped,
Broken
};
};
}
}
需要的是两个类的统一枚举状态,外部世界可以看到安全类型转换。
我想出的最好,也可能是最直接的方法是创建外部枚举:
enum State {
Running,
Stopped,
Broken
};
连同转换功能
State stateEnumConv(A::B::CarInfo::State aState);
State stateEnumConv(A::B::BikeInfo::State aState);
A::B::CarInfo::State stateEnumConv(State aState);
A::B::BikeInfo::State stateEnumConv(State aState);
需要朝着正确的方法方向前进。
天哪,来自 C 我讨厌到处都是那些长命名空间,我希望它只能是 A::B 级别,就像所展示的示例一样。四个转换函数似乎是多余的,请注意CarInfo::State和BikeInfo::State具有相同的枚举"成员"。
可以使用 typedef 或 alias 声明来引入此类型。
例如
typedef enum {
Running,
Stopped,
Broken
} State;
您可以使用define
#define ToGeneric(vehicleInfoState) ((State) vehicleInfoState)
#define ToSpecialized(vehicleInfo, state) ((A::B::vehicleInfo::State) state)
用法示例:
ToGeneric(car->getState()) // with car->getState() which returns A::B::CarInfo::Running
ToSpecialized(CarInfo, Running)
[编辑]模板版本似乎也可以工作:
template <typename T>
State ToGeneric(typename T::State s) { return static_cast<State>(s); }
template <typename T>
typename T::State ToSpecialized(State s) { return static_cast<typename T::State>(s); }
ToGeneric<A::B::CarInfo>(carInfoState);
ToSpecific<A::B::CarInfo>(state);
但是您每次都必须指定类型(ToGeneric
)
相关文章:
- 如何在C++中从两个向量生成所有可能的对?
- 无法理解代码背后的逻辑,这是在两个给定数字之间生成素数的优化问题
- 使用两个 for 循环生成以下星号
- Qt-grabtoimage()和scale生成两个重叠的图像
- pair的两个构造函数几乎相同,为什么不生成构建错误?
- 如何在两个复数的总和中使用自动类型转换?(C++)
- 在构建服务器上将 dll C++生成到两个平台 (x86+x64)
- 如何使用Mersenne Twister生成两个数字之间的所有值一次
- c++ 编译器优化是否可以针对布尔参数生成两个版本的函数
- Visual C++:按值复制到函数参数在 VS2012 中生成两个对象
- 如何使用SWIG中的相同接口生成两个代理类
- 映射/联接两个自动生成的枚举的最佳方式
- 将-1移位到sizeof(int)在C++中生成两个不同的结果
- 为单个DSL生成两个解析器
- Boost接受器每次接受两次输入连接,并生成两个线程
- 为什么ndk-build会生成两个不同的库,一个很大,一个小
- 使用一个编译轮生成两个或多个输出文件
- 生成两个(或多个)均匀分布的随机数
- 用c++在OpenGl中生成两个对象
- 如何在基类中生成两个同名函数