2017-01-09 77 views
0

我试图让SWIG到%ignore象征码MyNamespace::SubNamespace::MyClass::operator->()。我试过一百万个不同的组合%ignore调试SWIG%忽略

  • %ignore operator->;
  • %ignore operator ->;
  • %ignore operator ->();
  • %ignore *::operator->;
  • %ignore MyNamespace::SubNamespace::MyClass::operator->;

地狱甚至%ignore MyNamespace::SubNamespace::MyClass;似乎并没有做任何事情。在任何情况下我得到这个错误:

...MyFile.hpp:267: Warning 508: Declaration of 'operator <' shadows declaration accessible via operator->(), 
...MyFile.hpp:192: Warning 508: previous declaration of 'operator <'. 

它由this SWIG code造成的,这似乎是是与智能指针。然而它看起来像%ignore代码operator->()应该删除警告。在任何情况下,都应该忽略整个班级。

所以我的问题是,有没有什么办法可以调试%ignore。据我所见,它看起来像你不得不继续尝试组合,直到它的工作。有没有办法打印出SWIG的符号列表?代码看起来不像它有任何日志记录工具。

+0

我有类似的情况,并使用%ignore MyNamespace :: SubNamespace :: MyClass :: operator->;确实有助于摆脱.__ deref __()代。你的问题更可能是由'operator <'而不是'operator->'引起的。 –

回答

0

嗯,我没有找到%ignore的选项,但有各种各样的-debug-...命令行选项。特别是-debug-symbols导致我发现operator->()%rename d到__deref__swig.swg它默认包含在所有文件中。

我试过%ignore __deref__;和一些变种,但doensn't工作。

我甚至最终修改了代码来检测%ignore S(提示:

/* Create a name applying rename/namewarn if needed */ 
static String *apply_rename(String *newname, int fullname, String *prefix, String *name) { 
    String *result = 0; 
    if (newname && Len(newname)) { 
    if (Strcmp(newname, "$ignore") == 0) { 
     printf("Renaming to ignore: %s\n", Char(name)); 
     result = Copy(newname); 

),但没有这些名字似乎已经命名空间。事实上,关于两个operator<的警告是在不同的类别(尽管一个是另一个的朋友),并且据我所知,如果还有其他operator<的SWIG正在查找。可能是一个命名空间错误。