在C++11中分离枚举声明和定义
Separate enum declaration and definition in C++11
这些论坛上有几个关于继承C++枚举进行扩展的问题(这实际上是没有逻辑的事情)。但是,仅仅用于设置特定值的继承呢?目前,在我的代码中有如下内容:
//lib_impl.h
enum class X {
a = 13, // these values are
b = 42 // implementation dependent
}
//lib.h
#include "lib_impl.h"
void some_func(X param) {
X x = X::a;
}
我只是想避免"lib"在实现中的依赖性。可能,必须使用枚举以外的其他方法。即使在C++11中,我们也只能声明正向枚举名称,而不能声明其枚举器:
//lib.h
enum class X { a, b } // this is both declaration and definition, unfortunately
void some_func(X param) {
X x = X::a;
}
//lib_impl.h
#include "lib.h"
enum class X { // redefenition, compilation error
a = 13,
b = 42
}
对于此类问题,最佳的编译时解决方案是什么?
--
由于它在c++中似乎无法实现,解决此类问题的最常见方法是什么?保持"lib"与"impl"的依赖关系不变?可能,"impl"可以分为两个部分,小的部分将包含在"lib.h"之前,另一个大的部分将包括在它之后。这可以吗?还是我需要放弃使用枚举,而使用抽象类
显示具有标称值的enum
(从0开始,按顺序)。在库中,将这些值重新映射到具有实现相关值的内部enum
(例如,使用外部值作为索引的速度数组)。如果将所述enum
值导出到外部,则反转映射(反转映射会较慢)。
相关文章:
- 如何在C++中声明/定义相互依赖的模板?
- C++概念是否允许我的类在声明/定义中指定它满足某些概念?
- MSVC:无法识别的模板声明/定义(使用 Clang/GCC 编译)
- 我可以重用同一个模板来声明/定义多个东西吗(而不复制模板代码)
- C++-模板类中模板函数的单独声明/定义
- 在C 中使用继承时,请避免使用未缴纳的函数声明/定义
- C++模板能否确定所声明/定义的实例是否为常量
- 如何在程序中声明/定义一次并在两个类中使用映射列表
- LBNF,C函数声明/定义,减少冲突
- 声明/定义返回具有自动返回类型的 valarray 的函数时的隔离错误
- #用{}和声明定义混淆
- CTOR 声明/定义中接受的 const 限定符(LLVM 错误?)
- C++ 从一个源文件中声明/定义的变量从另一个源文件访问另一个源文件
- 无法识别的模板声明/定义
- 只在.cpp中声明/定义静态方法可以吗
- 声明/定义自定义类定制对象的正确方法
- typedef声明定义未命名类时链接失败
- 用visual c++实现COM对象的声明/定义和实例化
- VS 2012中的显式模板声明/定义
- 命名空间内的友元函数声明/定义