栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将C ++类实例暴露给python嵌入式解释器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将C ++类实例暴露给python嵌入式解释器

Boost
python
允许您以非常紧密的集成方式将c
类公开给python-您甚至可以包装它们,以便可以从c 类派生python类,并将虚拟方法解析为python覆盖。

该升压蟒蛇教程是一个良好的开端。


编辑:

You can create a c++ object and pass a reference to it to an internal python
interpreter like this:

#include <boost/shared_ptr.hpp>#include <boost/make_shared.hpp>#include <boost/python.hpp>#include <string>#include <iostream>namespace bp = boost::python;struct Foo{    Foo(){}    Foo(std::string const& s) : m_string(s){}    void doSomething() {        std::cout << "Foo:" << m_string << std::endl;    }    std::string m_string;};typedef boost::shared_ptr<Foo> foo_ptr;BOOST_PYTHON_MODULE(hello){    bp::class_<Foo, foo_ptr>("Foo")        .def("doSomething", &Foo::doSomething)    ;};int main(int argc, char **argv){    Py_Initialize();    try {        PyRun_SimpleString( "a_foo = Nonen" "n" "def setup(a_foo_from_cxx):n" "    print 'setup called with', a_foo_from_cxxn" "    global a_foon" "    a_foo = a_foo_from_cxxn" "n" "def run():n" "    a_foo.doSomething()n" "n" "print 'main module loaded'n"        );        foo_ptr a_cxx_foo = boost::make_shared<Foo>("c++");        inithello();        bp::object main = bp::object(bp::handle<>(bp::borrowed( Pyimport_AddModule("__main__")        )));        // pass the reference to a_cxx_foo into python:        bp::object setup_func = main.attr("setup");        setup_func(a_cxx_foo);        // now run the python 'main' function        bp::object run_func = main.attr("run");        run_func();    }    catch (bp::error_already_set) {        PyErr_Print();    }    Py_Finalize();    return 0;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/668321.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号