python数组 swig_使用SWIG Python动态绑定C++对象

SWIG(Simplified Wrapper and Interface Generator)是一个为C/C++库提供脚本调用支持的工具,支持Lua, Perl, Python, Go等多种脚本语言。如果不了解可以参考Interfacing C/C++ and Python with SWIG。本文主要关注在SWIG Python中如何实现绑定已有C++实例,想象一下,调试时如果可以不用重新编译C++程序,使用脚本动态调用C++,该是有多方便。SWIG文档31.3.5 Pointers小节中明确提到

However, the inverse operation is not possible, i.e., you can't build a Swig pointer object from a raw integer value

官方是不提供支持的,但是仔细看一下SWIG代码会发现并不难实现。

首先,我们来看一下SWIG是如何对C++类进行封装的,定义一个简单的测试类:

#ifndef FOO_H__#defineFOO_H__classFoo

{public:

Foo();intGetNum();voidSetNum(intnum);private:intm_num;

};#endif//FOO_H__

Foo.cpp

#include"Foo.h"Foo::Foo()

: m_num(-1)

{

}intFoo::GetNum()

{returnm_num;

}voidFoo::SetNum(intnum )

{

m_num=num;

}

接口文件:

%module foo%{

#include"Foo.h"%}classFoo

{public:

Foo();intGetNum();voidSetNum(intnum);private:intm_num;

};

调用命令:swig -c++ –python Foo.i生成wrapper文件,然后使用distutils编译成_foo.so:

from distutils.core import setup, Extension

setup(name="foo", version="1.0", ext_modules=[Extension("_foo", ["Foo_wrap.cxx","Foo.cpp"],

extra_compile_args=['-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值