栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

(pybind)c++调用python/python调用c++

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

(pybind)c++调用python/python调用c++

pybind通常是使用c++调用python文件,创建一个名为test_basic.py的文件,下面叙述调用步骤:

1.c++调用python:

def test_main():
    print("hello python.")
    
def test_func2(a):
    print(type(a))
    a.print()

2.python调用c++,其实原理就是c++调用python再hook回去cpp代码,传给python的参数是一个对象(可以是指针,对象也可以),对象内部包含这cpp的函数,在python层的方法里面,调用cpp的方法即可。

#include 
#include 

#include 

#define STRINGIFY(x) #x
#define MACRO_STRINGIFY(x) STRINGIFY(x)

class A
{
public:
    A() {}
    double a;

    void print();
};

void A::print()
{

    printf("hello A.n");
}

namespace py = pybind11;

PYBIND11_EMBEDDED_MODULE(embeded, module)
{
    py::class_ a(module, "A");
    a.def("print", &A::print);
}

int main()
{
    py::scoped_interpreter python;

    auto test = py::module::import("tests.test_basic");
    auto embeded = py::module::import("embeded");
    // auto func = test.attr("test_main");
    py::object result;
    // result = func();
    auto func2 = test.attr("test_func2");
    // auto a = new A();
    auto a = A();
    // auto func_a = []()
    // { printf("hello anonymous function.n"); };
    a.a = 1.0;
    result = func2(a);
}```

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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