草庐IT

java - 使用 SWIG 生成 Java 接口(interface)

我正在使用SWIG制作C++库(关于Json(反)序列化)的Java包装器,以便在Android上使用它。我在C++中定义了一个抽象类,表示一个可以(反)序列化的对象:classIJsonSerializable{public:virtualvoidserialize(Value&root)=0;virtualvoiddeserialize(Value&root)=0;};现在,我试图从这个类生成一个Java接口(interface)。这是我的SWIG界面:%moduleJsonSerializable%{#include"JsonSerializable.hpp"%}%import"

java - 使用 SWIG 生成 Java 接口(interface)

我正在使用SWIG制作C++库(关于Json(反)序列化)的Java包装器,以便在Android上使用它。我在C++中定义了一个抽象类,表示一个可以(反)序列化的对象:classIJsonSerializable{public:virtualvoidserialize(Value&root)=0;virtualvoiddeserialize(Value&root)=0;};现在,我试图从这个类生成一个Java接口(interface)。这是我的SWIG界面:%moduleJsonSerializable%{#include"JsonSerializable.hpp"%}%import"

c++ - 用 swig 包装专门的 c++ 模板类

考虑以下类声明:namespaceX{templateclassFoo{public:Foo();virtual~Foo();Tvalue()const;};templateclassFoo>{public:Foo();virtual~Foo();Tvalue(constint)const;};}对于他们,我在foo.i文件中有以下声明%include"stl.i"%include"std_string.i"%include"std_vector.i"namespaceX{usingnamespacestd;templateclassFoo{public:Foo();virtual~F

php - 模板类型作为 SWIG 中的结构数据成员

我正在使用SWIG为C++库编写PHP包装器,但我在使用具有模板类型实例作为数据成员的结构时遇到了问题。假设我有以下头文件:templatestructmyvector{};structS{myvectorv;};myvectorfoo();Sbar();和接口(interface)文件:%moduletest%{#include"test.hpp"%}%include"test.hpp"%template(IntVec)myvector;当我尝试使用直接返回myvector的函数时,它工作正常:$v1=test::foo();但是,当我尝试使用返回S对象的函数,并尝试访问其类型为my

c++ - 使用SWIG将自定义C++异常动态地重新抛出为Python异常

情况我想使用SWIG为C++API创建Python语言绑定(bind)。一些API函数可能会引发异常。C++应用程序具有自定义异常的层次结构,例如以下示例:std::exception->API::Exception->API::NetworkException->API::TimeoutException->API::UnreachableException->API::InvalidAddressException所需的行为如下:所有异常类型都应具有匹配的Python类,如包装器。这些包装器类应为有效的Python异常。当API调用引发C++异常时,应该是捕获到。对应的python

Ruby 和 SWIG 与 CMake

有没有人幸运地使用CMake通过SWIG创建Ruby绑定(bind)?我有一个在我的CMake文件中通过SWIG创建Python绑定(bind)的工作示例,但是当我使用相同的方法创建Ruby绑定(bind)时,实际的Ruby文件不会被创建。使用有效的Python绑定(bind),确实会创建一个Python文件。这是我的CMakeLists.txt文件的相关部分:if(${SWIG_FOUND})find_package(RubyREQUIRED)include_directories(${RUBY_INCLUDE_DIRS})include(${SWIG_USE_FILE})set(C

php - 使用 SWIG 在 PHP 中包装 boost::shared_ptr

如果我使用SWIG包装这个C++函数:boost::shared_ptrClient::create(){returnboost::shared_ptr(newClient());}然后在PHP中调用它:$client=Client::create();echogettype($client);$client的类型是resource,不是object,所以我不能调用Client方法。包装此功能的选项有哪些?我正在为其他人的C++库创建一个PHP包装器,因此重新编写代码以不使用boost::shared_ptr并不是一个真正的选择。这是迄今为止我想出的唯一解决方案:MyClientCli

Java/C++ SWIG - 使用数组参数调用函数

所以我的代码看起来像这样:booldoSomething(unsignedintx,constmyStruct1typeOne[2],myStruct2typeTwo[2]);使用swig我得到java代码:publicstaticbooleandoSomething(longx,myStruct1typeOne,myStruct2type2){}我想要的是:publicstaticbooleandoSomething(longx,myStruct1[]typeOne,myStruct2[]type2){}我知道问题在于SWIG无法知道我在Java中的数组将只有2个元素,因为java声

c++ - SWIG - 命名空间问题

我无法让以下简单示例与SWIG1.3.40一起使用(我也尝试过1.3.31)。只要我不将Foo结构包装在命名空间中,Foo结构就会作为Python模块出现,但一旦我这样做,我就会在生成的test_wrap.c中遇到编译错误。测试.h:#ifndef__TEST_H__#define__TEST_H__#defineUSE_NS1#ifUSE_NSnamespacens{#endifstructFoo{floata;floatb;floatfunc();};#ifUSE_NS}#endif#endif测试.cpp#include"test.h"#ifUSE_NSnamespacens{#

c++ - SWIG 无法识别字符串参数

我有一个令人沮丧的问题,让我花了很多时间来处理它,但我没有找到任何解决方案。我想在带有SWIG的PHP中使用C++类。我生成了我的共享对象,它对某些方法工作正常,但每当我使用字符串参数作为输入调用这些方法时,我都会遇到此错误:Fatalerror:Typeerrorinargument2ofPKI_Buf_initHex.ExpectedSWIGTYPE_p_std__stringPKI_Buf_initHex是SWIG自动生成的包装器类的名称。在我的C++代码中,我将initHex方法声明为:intinitHex(conststringx){..}我在我的接口(interface)文