作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在编写一个 C/C++ 程序,它使用头文件中的一堆 enum
,例如
typedef enum
{
POINT,
LINE,
AREA,
VOLUME
} domainType;
我的程序与各种其他语言(F77、F90、Python 等)交互,我希望这些枚举类型在 C/C++ 头文件中定义一次,并在其他语言中也使用它们。我想避免为我正在使用的每种语言定义相同的“enum
”类型(它们在其他语言中可能有不同的称呼......)因为这很容易出错任务。有什么优雅的方法吗?
最佳答案
假设在所有语言中,您将它们定义为逗号分隔列表,您可以这样做:
ENUMS.txt
POINT,
LINE,
AREA,
VOLUME
Myfile.h
typedef enum
{
#include "ENUMS.txt"
} domainType;
在 C/C++ 中这会起作用。但是我不知道您的其他语言是否具有类似 C/C++ 中的 include 的功能。如果是,那么您可以通过这种方式进行。
我很确定这在 Java 中是行不通的。
否则你只能在一些配置文件中定义它们并通过函数映射它们,但它们将不再是枚举。如果您只有这个示例,那么可能不值得付出努力,但如果您有数百个这样的名字,那么它可能是值得的。
更新
考虑到这一点后,可能会有一些其他方法,这会有点工作,但可能会有用。对于像我上面显示的那样支持包含的语言,这种方法很好。对于其他语言,如 Java、Python 等,您可以编写一个简单的脚本来生成有效的源文件。我正在为 java 做一些类似的事情,根据从数据库中读取的定义将数据库记录生成为类。如果您必须支持多种语言,和/或经常修改枚举,这可能会有用,因为您仍然需要维护一个源。
关于python - 如何使 C 枚举类型可用于其他语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21045236/
我是一名优秀的程序员,十分优秀!