对于现代C++,使用CPPYY:
http://cppyy.readthedocs.io/en/latest/
它基于CLAN,CLAN/LLVM的C++解释器。绑定处于运行时,不需要额外的中间语言。多亏了Clang,它支持C++ 17。
使用pip安装:
$ pip install cppyy
$ cat foo.h
class Foo {
public:
void bar();
};
$ cat foo.cpp
#include "foo.h"
#include <iostream>
void Foo::bar() { std::cout << "Hello" << std::endl; }
编译它:
$ g++ -c -fPIC foo.cpp -o foo.o
$ g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
使用它:
$ python
>>> import cppyy
>>> cppyy.include("foo.h")
>>> cppyy.load_library("foo")
>>> from cppyy.gbl import Foo
>>> f = Foo()
>>> f.bar()
Hello
>>>
支持自动加载准备好的反射信息和cmake片段来创建大型项目,以便安装包的用户可以简单地运行:
$ python
>>> import cppyy
>>> f = cppyy.gbl.Foo()
>>> f.bar()
Hello
>>>
由于LLVM,高级特性是可能的,例如自动模板实例化。继续示例:
>>> v = cppyy.gbl.std.vector[cppyy.gbl.Foo]()
>>> v.push_back(f)
>>> len(v)
1
>>> v[0].bar()
Hello
>>>