"No type checking rule" 仅在我提供类型检查规则时出错

"No type checking rule" error only when I supply a type checking rule

我有一个 class,主要用作 boost::shared_ptr。我正在尝试包装一些重载函数,并且需要添加一个类型检查规则,以便从 Python 端提供一些功能。

当我告诉 SWIG 要为我的 class 使用共享指针时,SWIG 包装器可以正常构建和编译。

%shared_ptr(mynamespace::MyClass)

然而,一旦我添加了类型检查规则,SWIG 告诉我没有提供类型检查规则!这是我的 SWIG 包装代码:

%shared_ptr(mynamespace::MyClass)
%typemap(typecheck) boost::shared_ptr<mynamespace::MyClass> {
    // always OK, dummy for testing.
     = SWIG_IsOK(1);
}

我收到的错误信息是:

/scr/dbw/bld/include/header.h:509:警告 467:重载方法 mynamespace::get_contacts(boost::shared_ptr< mynamespace::MyClass >) 不受支持([=23 没有类型检查规则=]).

我不明白为什么,但在这种情况下我需要为类型检查提供优先级:

%shared_ptr(mynamespace::MyClass)
%typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER) boost::shared_ptr<mynamespace::MyClass> {
    // always OK, dummy for testing.
     = SWIG_IsOK(1);
}

对于其他类型检查,我当然不需要提供优先级。