2017-01-09 101 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正在查找。可能是一個命名空間錯誤。