草庐IT

c++ - swig 包装器的速度

如果我用C++编写几个类,然后使用swig进行转换,以便我以后可以在Python中使用它们,与我完全用Python重写它们相比,它们运行得更快还是更慢?或者没有明显的速度差异? 最佳答案 SWIG生成的包装器的质量和速度非常好,它们的性能可能与手工制作的包装器一样好。根据我的经验,包装器本身非常薄,并且给它们包装的native函数增加的开销很小,这使得在python或任何其他支持的语言中使用包装库成为一个完全有效的选择,并且是重用的好方法代码。但是,如果您除了代码重用之外还对性能感兴趣,那么包装native代码可能只有在您具有一些计

c++ - SWIG C++ Python : wrapping int by reference or pointer

我正在尝试将一些C++函数包装到Python包装器中。为此,SWIG似乎是一种不错且简单的方法。换行有效,但我在通过引用或指针传递整数时遇到问题。由于Python无法使用引用,SWIG在内部将它们转换为指针。一些简单的示例代码:布拉特.hpp:#ifndef__BLAAT_HPP__#define__BLAAT_HPPclassBlaat{public:intmA;floatmB;public:Blaat(){}voidgetA(int&fA);voidsetA(constintfA);~Blaat(){}};#endif//__BLAAT_HPP__Blaat.cpp#include

python - 有什么好的方法可以为 swig 接口(interface)生成文档吗?

我想知道有没有什么好的技术来构建/维护界面文档。我正在使用swig构建一个从C++代码到Python的接口(interface);大多数时候我只是%包括C++头文件。我正在处理至少几十个类(class)和100多种功能,因此首选自动化工具。理想情况下,我想在c++header中使用doxygen格式的注释来在python类/方法中填充文档字符串。或者,生成单独的文档(ascii、html...)也会很有用。看起来支持这种功能在swig的早期版本(1.3及更早版本)中,但我看不出有什么办法它与2.0.是否有任何有用的(自动化的)技术来记录界面? 最佳答案

c++ - SWIG 为 Python 包装 C++ : translating a list of strings to an STL vector of STL strings

我想用SWIG包装一个C++函数,它接受一个STL字符串vector作为输入参数:#include#include#includeusingnamespacestd;voidprint_function(vectorstrs){for(unsignedinti=0;i我想将其包装到一个名为“mymod”的模块中可用的Python函数中:/*mymod.i*/%modulemymod%include"typemaps.i"%include"std_string.i"%include"std_vector.i"%{#include"mymod.hpp"%}%include"mymod.hp

c++ - SWIG 如何在 Python 中包装 map<string,string>?

我正在使用SWIG2.0为C++库创建Python包装器。一种方法有一个类型为“conststd::map&”的参数。SWIG很乐意为它生成一个包装器,但我不知道如何调用该方法。例如,如果我为该参数传递{"a":"b"},我会收到“NotImplementedError:重载函数的参数数量或类型错误”错误。我查看了生成的.cxx文件,希望它能说明问题,但事实并非如此。下面是处理该参数的代码:res4=SWIG_ConvertPtr(obj3,&argp4,SWIGTYPE_p_std__mapT_std__string_std__string_t,0|0);if(!SWIG_IsOK(

使用 swig 和 Anaconda Python 找不到 Python.h

我正在尝试按照本教程编译一个简单的python/C示例:http://www.swig.org/tutorial.html我在MacOS上使用Anacondapython。然而,当我运行时gcc-cexample.cexample_wrap.c-I/Users/myuser/anaconda/include/我得到:example_wrap.c:130:11:fatalerror:'Python.h'filenotfound#include^貌似这个问题在很多问题中都有反射(reflect):MissingPython.hwhiletryingtocompileaCextensionm

c++ - SWIG C++ 到 Python : Warning(362): operator= ignored

我正在将C++类导出到Python,我注意到在编译期间,SWIG发出了以下警告:Warning(362):operator=ignored我不确定为什么运算符会重载,因为它在SWIGdocumentation中说,SWIG能够处理赋值运算符等运算符我的类没有什么特别之处,它是这样声明的:classFoo{public:Foo();Foo&operator=(constFoo&);//etc..};为什么SWIG无法为赋值运算符生成包装代码,我该如何解决这个问题? 最佳答案 python中没有赋值(原始类型除外),只有指针赋值。如果你

c++ - 如何使用 SWIG 枚举枚举成员

我能否将C++enum作为真实实体而不是一组常量公开给SWIG,以便我可以在python代码中枚举它们? 最佳答案 我遇到了同样的问题。我希望SWIG很快支持C++11的enumclass。这是一个说服SWIG将枚举放入结构中的hack:#ifdefSWIG%rename(MyEnum)MyEnumNS;#endifstructMyEnumNS{enumValue{Value1,Value2,Value3};};typedefMyEnumNS::ValueMyEnum;在.cpp代码中,您现在必须使用MyEnum::Value1,而

python - 用数组成员包装 C 结构以便在 python : SWIG? cython 中访问?类型?

我想从python访问一个C函数,该函数返回一个包含double组的结构(其中这些数组的长度由结构的其他int成员给出)。声明是typedefstruct{intdim;intvertices;intquadrature_degree;intpolynomial_degree;intngi;intquadrature_familiy;double*weight;/*1D:ngi*/double*l;/*2D:ngi*dim*/double*n;/*2D:ngi*vertices*/double*dn;/*3D:ngi*vertices*dim*/}element;externvoidg

python - 检测到 Swig/Python 内存泄漏

我有一个非常复杂的类,我正尝试在SWIG中为其制作Python包装器。但是,当我在Python中创建该项目的实例时,我无法在未收到消息的情况下初始化某些数据成员:>>>myVar=myModule.myDataType()swig/pythondetectedamemoryleakoftype'MyDataType*',nodestructorfound.有人知道我需要做什么来解决这个问题吗?有没有我可以用来生成析构函数的标志? 最佳答案 SWIG始终生成析构函数包装器(除非使用%nodefaultdtor指令)。但是,如果它对类型