繼續使用前面的專案,但是先修改下python指令碼(zoo.py),新增add
和str
函式,分別針對整數、浮點數和字串引數的測試
def add(x, y):
print(x + y)
def str(s):
print("output: " + s)
if __name__ == '__main__':
pass
然後修改下main.cpp
原始檔
using namespace boost::python;
using namespace boost::python::detail;
int main()
trycatch (const error_already_set&)
py_finalize();
return 0;
}編譯並測試
# cd build
# make
# ./core
67.0
output: test
首先修改下python指令碼(zoo.py),新增pet
函式,針對類例項引數的測試,其引數為animal類例項
import boost
def pet(obj):
obj.eat("meat")
print(type(obj))
print(isinstance(obj, boost.animal))
if __name__ == '__main__':
pass
然後修改下main.cpp
原始檔
using namespace boost::python;
using namespace boost::python::detail;
int main()
trycatch (const error_already_set&)
py_finalize();
return 0;
}編譯並測試
# cd build
# make
# ./core
wangcai: eat meat
false
首先修改下python指令碼(zoo.py),新增tlist
、tdict
和ttuple
函式,分別用於測試std::vector
/std::list
、std::map
以及陣列
def tlist(l):
for i in l:
print(i)
def tdict(d):
for k in d:
print(str(k) + ":" + str(d[k]))
def ttuple(t):
for i in t:
print(i)
if __name__ == '__main__':
pass
然後修改下main.cpp
原始檔
using namespace boost::python;
using namespace boost::python::detail;
int main()
try; for (auto item : v)
module.attr("tlist")(l);
dict d;
d.setdefault("fwd", 28);
d.setdefault("xb", 26);
module.attr("tdict")(d);
tuple t = make_tuple("fwd", 28, "xb", 26);
module.attr("ttuple")(t);
} catch (const error_already_set&)
py_finalize();
return 0;
}編譯並測試
# cd build
# make
# ./core
2dog34
56fwd:28
xb:26
fwd28
xb26
類例項還是盡量匯出後在python指令碼中建立,如果在c++**中建立,然後傳入python指令碼的話,它的型別並不是boost.animal
,這就導致無法使用isinstance
來區分物件。 Boost Python學習筆記(二)
首先定義乙個動物類 include animal.h pragma once include class animal 其實現 如下 src animal.cpp include include animal.h animal animal std string name name name ani...
Boost Python學習筆記(一)
boost 1 66 0.tar.gz 生成編譯工具 tar axf boost 1 66 0.tar.gz cd boost 1 66 0 yum install gcc gcc c python devel cmake y bootstrap.sh編譯32位boost庫 b2 install w...
Boost python 程式設計記錄
一 使用boost python 使用的是windows,anaconda python2.7 include的路徑包含 anaconda anaconda include,boost include lib的路徑包含 anaconda anaconda libs,boost libs lib有 b...