免費開源的Python程序庫述說
Python程序庫是進行免費開源的,可以移植到多種操作系統,如果不依賴指定的操作系統的功能,Python程序可以在不同的操作平臺上運行操作,這也是許多程序員青睞它的優點之一。
Boost C++庫集合提供了線程、靈活指針、運算規則、Python以及更多內容的庫。Boost中的許多庫已經作為將來的C++標準附件提交。Boost Python C++庫是一個很好的模板庫,它允許你為Python程序庫用戶封裝任何C++類或者函數。有了這個庫,創建一個由C++代碼模型與Python代碼聯合組成的系統就較為簡單了。
如何開始首先,下載并安裝Boost。盡管Boost的大多數內容在頭文件之中,Python庫還是必須編譯。Boost支持大多數目前市面上流行的編譯器,包括Visual C++ 6和7。Boost使用一個叫著JAM的構建系統(build system不要忘了下載JAM庫)。對每一種編譯器,都需要一步一步的設置構建指示(build instruction)。
如果你按照這些指示來做,那么建立過程就應該不會有問題。你還需要下載并安裝Python。如果你使用的是Windows操作系統,那么我強烈建議你選用ActiveState版的Python。建立Boost之后,你還需要把Boost的目錄添加到你的include路徑上,并把靜態庫以及動態庫添加到你的項目中去
編寫代碼在Python中,擴展是作為DLL或者共享庫實現的,所以你需要創建DLL項目。在我們的例子項目中,我們所創建的Python擴展將會產生一個消息框,該消息框的文本內容可以任意改變。
這個例子顯然是沒有多少實用價值,但是它會幫助你理解本文內容要點。在VC中,首先創建一個簡單的DLL項目,然后,向這個項目添加一個叫著 CMsgBox的類。給這個類添加一個新的構造函數,構造函數的參數為一個標準字符串。然后,在這個類中添加一個叫著Show的方法,這個方法沒有參數,其返回值為void型。現在,你得到的代碼應該如下所示:
- #include <string>
- typedefstd::string string;
- class CmsgBox
- {
- string m_Text;
- public:
- CMsgBox(void);
- virtual ~CMsgBox(void);
- CMsgBox(const string &text):m_Text(text){}
- void Show(){
- MessageBox(NULL, m_Text.c_str(), "Python", MB_OK);
- }
- };
- 為了讓Python可以訪問這個類,我們需要添加下面的代碼:
- #include <boost/python/class_builder.hpp>
- namespace python = boost::python;
- //這里是上面例子中的代碼
- ...
- BOOST_PYTHON_MODULE_INIT(PythonDemo)
- {
- python::module_builder mod("PythonDemo");
- python::class_builder<CMsgBox> msgbox(mod, "CMsgBox");
- msgbox.def(python::constructor<string>());
- msgbox.def(CMsgBox::Show, "Show");
- }
這就是一個可以運行的擴展模塊,這里的重點就是BOOST_PYTHON_MODULE_INIT宏。這個宏處理了模塊初始化,并向Python提供對類、構造函數以及方法的訪問。注意:DLL的名字和模塊名必須相同。在建立了這個DLL之后,把它拷貝到你的Python安裝目錄下的DLL目錄。下面是如何在Python下使用這個擴展。
上面的代碼看起來好像不太整齊,但是你可以得到其它額外的收獲。你可以在Python程序庫中子類化(subclass)這個CmsgBox類。(如果你對Python不熟,那么你一般不能在Python中子類化擴展類。)