$ 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...