[英]How can I make the functions provided by my Python program available to programs written in other languages running on the same or other computers?
[英]How to make C enum types available to other languages?
我目前正在編寫一個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中將不起作用。
否則,您只能在一些配置文件中定義它們並通過函數將它們映射,但是它們將不再是枚舉。 如果僅此示例,則可能不值得付出任何努力,但是,如果您有數百個這樣的名稱,則可能值得。
UPDATE
在考慮了這一點之后,可能還有其他方法,雖然需要一些工作,但可能很有用。 對於支持如我上面顯示的include的語言,此方法很好。 對於其他語言,例如Java,Python等,您可以編寫一個簡單的腳本來生成有效的源文件。 我在做類似的事情,使java根據從數據庫中讀取的定義將數據庫記錄生成為類。 如果您必須支持多種語言,並且/或者經常修改枚舉,那么這可能很有用,因為您仍然需要維護一個來源。
采用Python的Devolus方法,您可以像這樣為枚舉文字創建字典:
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之后,還有一百萬...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.