【发布时间】:2021-07-23 14:12:30
【问题描述】:
我们有一个顶级 C 库头文件,其中包含一组常量 (以及 C 函数或课程),例如:
const int32_t Sample_FooFoo = 1;
const int32_t Sample_FooBar = 2;
const int32_t Sample_BarFoo = 3;
const int32_t Sample_BarBar = 4;
int API_Function_BarbarbarFooFoo_1();
int API_Function_BarbarbarFooFoo_2();
...
为了方便起见,我们的想法是为这个头文件提供一个 C++ 包装器:即,它只是将一组常见的函数包装到类中,处理错误的异常,一切都很好。
然而,我们偶然发现的问题是如何将一组 C 常量转换为适当的强类型枚举?和上面一样应该翻译成:
enum class Sample : int32_t
{
FooFoo = 1,
FooBar = 2,
...
};
手动执行此操作本质上违反了 DRY 范式,它不再那么漂亮和闪亮了.. 也许有一些自动的方法可以做到这一点?例如,通过编写一个 python 脚本来解析 C 头文件并将每组常量(可能经过适当注释)转换为相应的 C++ 枚举?
【问题讨论】:
-
虽然不是特别复杂,但 C 语法已经很难用简单的脚本处理:多行 cmets 可能包含接近您想要处理的数据的数据呢?恕我直言,手动操作并不违反 DRY 原则:DRY 表示最终代码不应包含重复的块,此处不会有重复。
-
重写代码涉及手动工作。你如何去做并不重要,重要的是最终结果。
标签: python c++ c parsing clang