如何使C枚举类型对其他语言可用?

2024-09-29 10:18:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在编写一个C/C++程序,它使用一个头文件中的一组^ {CD1>}s,比如说

typedef enum
{
    POINT,
    LINE,
    AREA,
    VOLUME
} domainType;
<>我的程序与各种其他语言(F77、F90、Python……)接口,我希望这些EnUM类型在C/C++头文件中定义一次,并用其他语言使用它们。我希望避免为我使用的每一种语言定义相同的“enum”类型(在其他语言中可能会有不同的调用…),因为这是一个非常容易出错的任务。有什么优雅的方法吗?你知道吗


Tags: 程序语言类型定义头文件lineareaenum
2条回答

假设在所有语言中都将它们定义为逗号分隔的列表,则可以执行以下操作:

枚举.txt

 POINT,
 LINE,
 AREA,
 VOLUME

Myfile.h

typedef enum
{
#include "ENUMS.txt" 
} domainType;
在C/C++中,这是可行的。但是我不知道你的其他语言是否有类似C/C++的类似功能。如果是的话,那么你可以这样做。你知道吗

例如,我很肯定这在Java中是行不通的。你知道吗

否则,您只能在一些配置文件中定义它们并通过函数映射它们,但这样它们就不再是枚举了。如果这个例子是你所有的,那么它可能不值得努力,但如果你有数百个这样的名字,那么它可能是值得的。你知道吗

更新

考虑到这一点后,可能会有其他的方法,这将是一点工作,但可能是有用的。对于支持include的语言(如我上面所示),这种方法很好。对于其他语言,如Java、Python等,您可以编写一个简单的脚本来生成有效的源文件。我对java做了类似的事情,根据从数据库读取的定义,将数据库记录作为类生成。 如果您必须支持多种语言和/或经常修改枚举,这可能会很有用,因为您仍然需要维护一个源。你知道吗

采用针对Python的DevPlus方法,可以为枚举文本创建字典,如下所示:

with open('ENUMS.txt', 'r') as f:
    content = f.read().splitlines()      

domainType = {}
index = 1
for enum_literal in content:
    enum_literal = enum_literal.strip() # remove any whitespace
    enum_literal = enum_literal.rstrip(',') # remove comma
    print 'Adding ' + enum_literal + ' to dict'
    domainType [enum_literal] = index
    index = index + 1   

然后可以使用“domainType”访问枚举。你知道吗

那是一种方法。我肯定还有一百万,因为这是Python。。。你知道吗

相关问题 更多 >