草庐IT

swig-template

全部标签

java - 如何使用 Swig 将数组(java 中的 long 数组)从 Java 传递到 C++

我有如下示例.h文件:classTest{public:voidSelectValues(longlongvalues[])};我使用SWIG并从下面的.i文件创建了JNI接口(interface)%moduleMyLib%include"carrays.i"%array_functions(longlong,long_long_array)%{#include"Test.h"%}/*Let'sjustgrabtheoriginalheaderfilehere*/%include/*Thislineisusedforcallingconventions*/%include"Test.h

c++ - 使用 SWIG 处理 std::function

显然,SWIG不理解std::function并破坏了Python绑定(bind)。例如,这适用于C++://SomewhereintheAPItypedefstd::functionUnitErrorHandler;//SomewhereelseintheAPIvoidUnit::setErrorHandler(constUnitErrorHandler&handler){}//Intheapplicationcodeunit->setErrorHandler([](constUnitError&error){std::cerr但这会破坏代码(除了为了简单起见而具有不同的行为,但这不

c++ - 为什么这段代码有 C2784 "could not deduce template argument"错误

来自Lambdafunctionpassedasparameter我可以编译示例:templateRangeFindFirstIf(Range,bool(*Function)(typenameRange::ConstReferencevalue));structrange{usingConstReference=constfloat&;};rangerng;rng=FindFirstIf(rng,[](constfloat&val){return(val当然不能链接,因为FindFirstIf没有实现。然而,当我做了类似的事情时:templateRangeMyTest(Range,Va

c++ - Python ctypes 回调函数到 SWIG

我有一个需要函数指针(WNDPROC)的SWIGC++函数,并想给它一个已被ctypes.WINFUNCTYPE包装的Python函数。在我看来,这应该是兼容的,但是SWIG的类型检查会抛出异常,因为它不知道ctypes.WINFUNCTYPE类型实际上是一个WNDPROC。我该怎么做才能将我的回调传递给SWIG以便它理解它? 最佳答案 我没有Windows机器来真正检查这个,但我认为你需要创建一个类型映射来告诉swig如何将PyObject包装器转换为WNDPROC://assumingthewrappedobjecthasana

c++ - 如何从 python SWIG 包装器向下转换 c++ 对象?

问题:我使用SWIG在python中包装了一些c++代码。在python方面,我想采用包装的c++指针并将其向下转换为指向子类的指针。我在SWIG.i文件中添加了一个新的c++函数来执行此向下转换,但是当我从python调用它时,我得到了TypeError。详情如下:我有两个C++类,Base和Derived。Derived是Base的子类。我有第三个类Container,它包含一个Derived,并提供一个访问器。访问器将Derived作为constBase&返回,如下所示:classContainer{public:constBase&GetBase()const{returnde

php - 从 PHP Web 应用程序调用 C++ 库 : system() vs SWIG PHP extension?

我有一个PHPWeb应用程序需要调用C++库中的函数。该库由供应商提供(Linux机器上的libfoo.a)。我的第一直觉是创建一个链接到libfoo.a的C++可执行文件,并将命令行参数传递给该函数。然后,PHPWeb应用程序可以对我的C++可执行文件执行system()调用。这将很容易实现。我担心的是为每次调用创建一个新的系统进程是否会增加很多开销。这个开销是多少?另一种方法是,我可以使用SWIG将C++函数包装在PHP扩展中,但我没有C++源代码。SWIG是否支持与“.a”库链接?是否需要我团队中的所有其他工程师更改他们的PHP配置以在libfoo.a中构建?如果system()

c++ - 如何使用 SWIG 将 C++ operator[] 包装在命名空间内的模板类中?

我正在使用SWIG仅使用其头文件来包装现有的C++库。该库使用命名空间和模板类来创建自定义对象数组。我在尝试包装用于访问包装数组内元素的下标运算符(operator[])时遇到问题。SWIG告诉我operator[]被忽略了,我应该改用%extend:small.i:18:Warning389:operator[]ignored(considerusing%extend)所以我正在尝试使用扩展,但无论我尝试过什么语法,我都无法让插入的代码显示在_wrap.cxx文件中。这是我的SWIG输入文件:%moduletltest%{...%}namespacenite{templateclas

c++ - 使用 SWIG 将 C++ char* 转换为 Java 中的 char[] 而不是 String

我正在尝试用Java包装以下C++函数:char*MyClass::to_cstring();此函数的输出作为JavaString对象返回。我希望它作为char[]Java数组返回。我目前正在使用“typemaps.i”和“std_string.i”。有没有一种方法可以覆盖该行为,使std::string仍作为JavaString返回,但char*作为Javachar数组返回?如何使用Javabyte[]而不是char[]这样就不必担心8位C++字符和Java的16位Unicode之间的转换? 最佳答案 为此,您需要将SWIG提供的

c++ - is_same_template 在模板别名上的奇怪行为

下面的程序...#include#includetemplatestructTemplate{};templateusingAlias=Template;templateclassT1,templateclassT2>structis_same_template:std::false_type{};templateclassT>structis_same_template:std::true_type{};intmain(){std::cout::value::value::value...输出...Template==Template:trueTemplate==Alias:fals

c++ - 在 C++11 标准中,它在哪里禁止 'template <typename T> class A {...}; template <typename T> class A<int> {...};'(如果有的话)?

我试图通过想象神秘的构造来更全面地掌握模板语法和语义。我认为C++11标准不允许使用以下语法:templateclassA{...};//phony"specialization"templateclassA{...};但是,我找不到在C++11标准中不允许使用此语法的地方。C++11标准不允许显示的语法是否正确?如果有,从哪里可以查到语法是不允许的? 最佳答案 令我感到非常惊讶的是,14.5.5[temp.class.spec]中没有明确声明必须在模板参数列表中使用类模板偏特化的所有模板参数。那将使templateclassA无效