免費(fèi)開源的Python程序庫(kù)述說
Python程序庫(kù)是進(jìn)行免費(fèi)開源的,可以移植到多種操作系統(tǒng),如果不依賴指定的操作系統(tǒng)的功能,Python程序可以在不同的操作平臺(tái)上運(yùn)行操作,這也是許多程序員青睞它的優(yōu)點(diǎn)之一。
Boost C++庫(kù)集合提供了線程、靈活指針、運(yùn)算規(guī)則、Python以及更多內(nèi)容的庫(kù)。Boost中的許多庫(kù)已經(jīng)作為將來的C++標(biāo)準(zhǔn)附件提交。Boost Python C++庫(kù)是一個(gè)很好的模板庫(kù),它允許你為Python程序庫(kù)用戶封裝任何C++類或者函數(shù)。有了這個(gè)庫(kù),創(chuàng)建一個(gè)由C++代碼模型與Python代碼聯(lián)合組成的系統(tǒng)就較為簡(jiǎn)單了。
如何開始首先,下載并安裝Boost。盡管Boost的大多數(shù)內(nèi)容在頭文件之中,Python庫(kù)還是必須編譯。Boost支持大多數(shù)目前市面上流行的編譯器,包括Visual C++ 6和7。Boost使用一個(gè)叫著JAM的構(gòu)建系統(tǒng)(build system不要忘了下載JAM庫(kù))。對(duì)每一種編譯器,都需要一步一步的設(shè)置構(gòu)建指示(build instruction)。
如果你按照這些指示來做,那么建立過程就應(yīng)該不會(huì)有問題。你還需要下載并安裝Python。如果你使用的是Windows操作系統(tǒng),那么我強(qiáng)烈建議你選用ActiveState版的Python。建立Boost之后,你還需要把Boost的目錄添加到你的include路徑上,并把靜態(tài)庫(kù)以及動(dòng)態(tài)庫(kù)添加到你的項(xiàng)目中去
編寫代碼在Python中,擴(kuò)展是作為DLL或者共享庫(kù)實(shí)現(xiàn)的,所以你需要?jiǎng)?chuàng)建DLL項(xiàng)目。在我們的例子項(xiàng)目中,我們所創(chuàng)建的Python擴(kuò)展將會(huì)產(chǎn)生一個(gè)消息框,該消息框的文本內(nèi)容可以任意改變。
這個(gè)例子顯然是沒有多少實(shí)用價(jià)值,但是它會(huì)幫助你理解本文內(nèi)容要點(diǎn)。在VC中,首先創(chuàng)建一個(gè)簡(jiǎn)單的DLL項(xiàng)目,然后,向這個(gè)項(xiàng)目添加一個(gè)叫著 CMsgBox的類。給這個(gè)類添加一個(gè)新的構(gòu)造函數(shù),構(gòu)造函數(shù)的參數(shù)為一個(gè)標(biāo)準(zhǔn)字符串。然后,在這個(gè)類中添加一個(gè)叫著Show的方法,這個(gè)方法沒有參數(shù),其返回值為void型?,F(xiàn)在,你得到的代碼應(yīng)該如下所示:
- #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可以訪問這個(gè)類,我們需要添加下面的代碼:
- #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");
- }
這就是一個(gè)可以運(yùn)行的擴(kuò)展模塊,這里的重點(diǎn)就是BOOST_PYTHON_MODULE_INIT宏。這個(gè)宏處理了模塊初始化,并向Python提供對(duì)類、構(gòu)造函數(shù)以及方法的訪問。注意:DLL的名字和模塊名必須相同。在建立了這個(gè)DLL之后,把它拷貝到你的Python安裝目錄下的DLL目錄。下面是如何在Python下使用這個(gè)擴(kuò)展。
上面的代碼看起來好像不太整齊,但是你可以得到其它額外的收獲。你可以在Python程序庫(kù)中子類化(subclass)這個(gè)CmsgBox類。(如果你對(duì)Python不熟,那么你一般不能在Python中子類化擴(kuò)展類。)