為了能快速修改程序的邏輯,我在C++ 程序中使用了 Python作為腳本。
程序內(nèi)部需要接收腳本傳過來的一些不同類型的消息,在C++ 程序中使用了枚舉來區(qū)分這些消息。 于是編寫腳本時(shí)想到:
如何能在Python中也使用這些枚舉?如何只維護(hù)一個(gè)文件?
1.Python中沒有枚舉類型,所以打算在文件中直接寫一些變量并賦值:
ENUM_VALUE1 = 1
ENUM_VALUE2 = 2
...
2.C++中的變量必須聲明,所以只能使用枚舉或宏定義,但是"#"在Python中是注釋,所以只能使用枚舉,所以我打算將定義文件寫成上面那種形式(假設(shè)文件名:"Micro.py"),然后C++中:
enum
{
#include "Micro.h"
}
但是 enum 中的每個(gè)定義后面都應(yīng)該有逗號(hào)",",要不然C++中就無法編譯通過了,所以我加入另一個(gè)文件"Comma.h",文件中只有一個(gè)逗號(hào)",",然后把定義文件修改成這樣:
ENUM_VALUE1 = 1
#include "Comma.h"
ENUM_VALUE2 = 2
#include "Comma.h"
...
3.我們的定義文件中還應(yīng)該有注釋內(nèi)容,要不然別人就看不懂這些定義到底代表啥意思了,考慮到C++中的注釋用"http://",Python中的注釋用"#",而"#"在C++中是編譯預(yù)處理指令的開始,所以我又把定義文件改寫成這樣:
#define _C_PY_DESCRIBE1 "宏定義描述1"
ENUM_VALUE1 = 1
#include "Comma.h"
#define _C_PY_DESCRIBE2 "宏定義描述2"
ENUM_VALUE2 = 2
#include "Comma.h"
...
結(jié)束了,呵呵,雖然很變態(tài),但是至少實(shí)現(xiàn)了宏定義的統(tǒng)一;
其他:
1.文件擴(kuò)展名只能保存為".py",所以C++中看不到語法高亮了。
2.如果注釋中包含中文,那么宏定義文件應(yīng)該保存為utf8格式,否則Python會(huì)提示未聲明解碼方式。
程序內(nèi)部需要接收腳本傳過來的一些不同類型的消息,在C++ 程序中使用了枚舉來區(qū)分這些消息。 于是編寫腳本時(shí)想到:
如何能在Python中也使用這些枚舉?如何只維護(hù)一個(gè)文件?
1.Python中沒有枚舉類型,所以打算在文件中直接寫一些變量并賦值:
ENUM_VALUE1 = 1
ENUM_VALUE2 = 2
...
2.C++中的變量必須聲明,所以只能使用枚舉或宏定義,但是"#"在Python中是注釋,所以只能使用枚舉,所以我打算將定義文件寫成上面那種形式(假設(shè)文件名:"Micro.py"),然后C++中:
enum
{
#include "Micro.h"
}
但是 enum 中的每個(gè)定義后面都應(yīng)該有逗號(hào)",",要不然C++中就無法編譯通過了,所以我加入另一個(gè)文件"Comma.h",文件中只有一個(gè)逗號(hào)",",然后把定義文件修改成這樣:
ENUM_VALUE1 = 1
#include "Comma.h"
ENUM_VALUE2 = 2
#include "Comma.h"
...
3.我們的定義文件中還應(yīng)該有注釋內(nèi)容,要不然別人就看不懂這些定義到底代表啥意思了,考慮到C++中的注釋用"http://",Python中的注釋用"#",而"#"在C++中是編譯預(yù)處理指令的開始,所以我又把定義文件改寫成這樣:
#define _C_PY_DESCRIBE1 "宏定義描述1"
ENUM_VALUE1 = 1
#include "Comma.h"
#define _C_PY_DESCRIBE2 "宏定義描述2"
ENUM_VALUE2 = 2
#include "Comma.h"
...
結(jié)束了,呵呵,雖然很變態(tài),但是至少實(shí)現(xiàn)了宏定義的統(tǒng)一;
其他:
1.文件擴(kuò)展名只能保存為".py",所以C++中看不到語法高亮了。
2.如果注釋中包含中文,那么宏定義文件應(yīng)該保存為utf8格式,否則Python會(huì)提示未聲明解碼方式。