次のように、関数をインスタンス化するため%rename
のディレクティブの前にディレクティブがある場合、この警告に遭遇する可能性があります。%template
%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
:
%template(MyIntFunction) my_function<int>;
そうすれば得られるから
エラー: テンプレート 'myfunction' が未定義です。
グローバルな名前変更ルールを適用している場合、これは非常にイライラします。本当に「名前変更を無視」する必要があるのは、いくつかのことだけです。タイプマップとは異なり、名前変更ディレクティブは常に有効です。一時的であっても、それらをオフにできると便利です。
私が思いついた唯一の回避策は、 に戻って、%rename
インラインで宣言したテンプレート関数にのみ一致するように (または一致しないように) 明示的に更新することです。そのようです:
// don't rename functions starting with "MyFunction"
%rename("%(undercase)s", %$isfunction, notregexmatch$name="^MyFunction") "";
完全ではありませんが、回避策です。
(これはすべて SWIG 4.0 で行われました)