Boost Python學習筆記(三)

2022-07-31 00:33:14 字數 2366 閱讀 5786

繼續使用前面的專案,但是先修改下python指令碼(zoo.py),新增addstr函式,分別針對整數、浮點數和字串引數的測試

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),新增tlisttdictttuple函式,分別用於測試std::vector/std::liststd::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...