Boost Python官方樣例(一)

2022-07-31 00:39:13 字數 2864 閱讀 8667

$ cat /etc/os-release

name="ubuntu"

version="16.04 lts (xenial xerus)"

id=ubuntu

id_like=debian

pretty_name="ubuntu 16.04 lts"

version_id="16.04"

home_url=""

support_url=""

bug_report_url=""

ubuntu_codename=xenial

# apt install libboost-python-dev cmake

建立工程目錄

$ mkdir lesson1

$ cd lesson1

編寫c++函式實現

$ vim greet.cpp

char const* greet()

編寫boost.python檔案

#include #include "greet.cpp"

boost_python_module(hello_ext)

為庫編寫cmakelists.txt

$ vim cmakelists.txt

cmake_minimum_required(version 2.8)

project(greet)

### 此處的動態庫名必須和boost_python_module()中定義的保持一致,即最後生成的庫必須名為hello_ext.so

add_library(hello_ext shared $)

set_target_properties(hello_ext properties prefix "")

#dependencies

include(findpkgconfig)

pkg_check_modules(python required python)

include_directories(/usr/include $)

target_link_libraries(hello_ext boost_python)

編譯庫

$ mkdir build

$ cd build

$ cmake ..

$ make

執行python測試庫檔案

### 在build目錄下執行,即hello_ext.so存在的目錄(可以將so移至其他目錄,這樣就可以在其他目錄下開啟python終端)

$ python

>>> import hello_ext

>>> help(hello_ext)

>>> hello_ext.greet()

'hello world'

編寫c++類實現

$ vim world.h

#include struct world

std::string greet()

std::string msg;

};

編寫boost.python檔案

#include #include "world.h"

using namespace boost::python;

boost_python_module(hello)

執行python測試庫檔案

$ python

>>> import hello

>>> planet = hello.world()

>>> planet.set('howdy')

>>> planet.greet()

'howdy'

編寫c++類實現

$ cat world.h

#include struct world

// added constructor

void set(std::string msg)

std::string greet()

std::string msg;

};

編寫boost.python檔案

#include #include "world.h"

using namespace boost::python;

boost_python_module(hello)

執行python測試庫檔案

>>> import hello

>>> planet = hello.world("test")

>>> planet.greet()

'test'

編寫c++類實現

$ vim var.h

#include struct var

std::string const name;

float value;

};

編寫boost.python檔案

#include #include "var.h"

using namespace boost::python;

boost_python_module(hello)

執行python測試庫檔案

>>> import hello

>>> x = hello.var('pi')

>>> x.value = 3.14

>>> print x.name, 'is around', x.value

pi is around 3.1400001049

protobuf c應用樣例

autogen.sh configure make make install 根據協議格式生成原始碼與標頭檔案 amessage.proto 檔案內容如下 message amessage 根據amessage.proto 生成c語言標頭檔案與原始碼 protoc c c out amessage....

rapidjson使用樣例

rapidjson預設支援的字元格式是utf 8的,一般中間介面是json檔案的話儲存為utf 8比較通用一些。如果是unicode的需要轉換。但從原始碼中的ch型別看,應該是支援泛型的,具體在用到了可以仔細研究一下。這篇文件中有json解析相關庫的效能比較,rapidjson還是各方面均衡比較突出...

位運算 樣例

取乙個整數 a 從右端開始的 4 7 位 1 先使 a 右移 4 位 a 4 2 設定乙個低 4 位全為 1 其餘全為 0 的數,可以用下面方法實現 0 4 0 的全部二進位制為 1 左移 4 位,這樣右端低 4 位為 0。3 將上面二者進行 運算。a 4 0 4 include void main...