C 擴充套件使用 c 和 Boost
這是使用 C++和 Boost 的 C 擴充套件的基本示例。
C++程式碼
放入 hello.cpp 的 C++程式碼:
#include <boost/python/module.hpp>
#include <boost/python/list.hpp>
#include <boost/python/class.hpp>
#include <boost/python/def.hpp>
// Return a hello world string.
std::string get_hello_function()
{
return "Hello world!";
}
// hello class that can return a list of count hello world strings.
class hello_class
{
public:
// Taking the greeting message in the constructor.
hello_class(std::string message) : _message(message) {}
// Returns the message count times in a python list.
boost::python::list as_list(int count)
{
boost::python::list res;
for (int i = 0; i < count; ++i) {
res.append(_message);
}
return res;
}
private:
std::string _message;
};
// Defining a python module naming it to "hello".
BOOST_PYTHON_MODULE(hello)
{
// Here you declare what functions and classes that should be exposed on the module.
// The get_hello_function exposed to python as a function.
boost::python::def("get_hello", get_hello_function);
// The hello_class exposed to python as a class.
boost::python::class_<hello_class>("Hello", boost::python::init<std::string>())
.def("as_list", &hello_class::as_list)
;
}
要將其編譯為 python 模組,你將需要 python 標頭檔案和 boost 庫。這個例子是在 Ubuntu 12.04 上使用 python 3.4 和 gcc 製作的。許多平臺都支援 Boost。在 Ubuntu 的情況下,使用以下方法安裝所需的包:
sudo apt-get install gcc libboost-dev libpython3.4-dev
將原始檔編譯為 .so 檔案,以後可以將其作為模組匯入,前提是它位於 python 路徑上:
gcc -shared -o hello.so -fPIC -I/usr/include/python3.4 hello.cpp -lboost_python-py34 -lboost_system -l:libpython3.4m.so
example.py 檔案中的 python 程式碼:
import hello
print(hello.get_hello())
h = hello.Hello("World hello!")
print(h.as_list(3))
然後 python3 example.py
將給出以下輸出:
Hello world!
['World hello!', 'World hello!', 'World hello!']