首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SWIG的警告503是什么?

SWIG的警告503是什么?
EN

Stack Overflow用户
提问于 2012-04-24 19:26:06
回答 3查看 5.2K关注 0票数 12

请解释一下这些警告是什么,以及如何避免?

代码语言:javascript
运行
复制
Warning 503: Can't wrap 'operator ()' unless renamed to a valid identifier.
Warning 503: Can't wrap 'operator =' unless renamed to a valid identifier.
Warning 503: Can't wrap 'operator *' unless renamed to a valid identifier.

这些警告是在Android NDK下编译SWIG生成的C++代码时生成的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-24 19:33:59

Java没有与C++相同意义上的operator()operator=等价物,因此SWIG无法直接包装它。因为它们可能很重要,所以会向您显示一个警告,说明它们没有被包装。(缺少operator=有时可能特别糟糕)。

此代码在运行swig -Wall -c++ -java时显示这样的警告

代码语言:javascript
运行
复制
%module Sample

struct test {
  bool operator()();
};

但是,您可以使警告静默,并告诉SWIG直接将操作符公开为常规成员函数,如下所示:

代码语言:javascript
运行
复制
%module Sample

%rename(something_else) operator();

struct test {
  bool operator()();
};

这会导致在生成的包装器中添加一个名为something_else的函数来代替operator()

或者你可以断言SWIG忽略这些是很好的,使用:

代码语言:javascript
运行
复制
%ignore operator()

(您也可以通过使用类名限定运算符来不太广泛地应用这些指令)。

票数 15
EN

Stack Overflow用户

发布于 2012-04-24 19:28:49

如果你想在目标语言中使用重载运算符,你需要在SWIG中以一种特殊的方式处理它们。参见here

票数 3
EN

Stack Overflow用户

发布于 2019-10-18 20:51:27

如果在用于实例化函数的%template指令之前出现%rename指令,则可能会遇到此警告:

代码语言:javascript
运行
复制
%module some_module
%rename("%(undercase)s", %$isfunction) ""; 
// equivalently  %rename("%(utitle)s", %$isfunction) "";

%inline %{
template<class T>
void MyFunction(){}
%}
// ...

%template(MyIntFunction) MyFunction<int>;

警告503:除非重命名为有效的标识符,否则无法包装'my_function< int >‘

并且您不能尝试在%template中预期重命名

代码语言:javascript
运行
复制
%template(MyIntFunction) my_function<int>;

因为那样你就会得到

错误:模板'myfunction‘未定义。

如果你正在应用全局重命名规则,这是非常令人沮丧的,而且你真的只需要为几件事“忽略重命名”。与类型映射不同,重命名指令永远有效。如果能够关闭它们,那就太好了,即使是暂时的。

我想出的唯一解决办法是返回到%rename,并将其更新为仅显式地匹配(或者更确切地说,不匹配)您声明的内联模板函数。如下所示:

代码语言:javascript
运行
复制
// don't rename functions starting with "MyFunction"
%rename("%(undercase)s", %$isfunction, notregexmatch$name="^MyFunction") "";

它不是完美的,但它是一种变通方法。

(这一切都是在SWIG 4.0中完成的)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10296932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档