<p>我在libRETS中找到了提示,您需要根据每个方法进行:</p>
<p><a href="http://code.crt.realtors.org/projects/librets/browser/librets/trunk/project/swig/auto_ptr_release.i?rev=HEAD" rel="nofollow">http://code.crt.realtors.org/projects/librets/browser/librets/trunk/project/swig/auto_ptr_release.i?rev=HEAD</a></p>
基本上,你想打开你从C++接收的AutoYPTR,然后在传递给C++之前把它包起来。要放入.i文件的代码示例如下:</p>
<pre><code> //original prototype:
//virtual void SetSomething(std::auto_ptr<ValueClass> value) = 0;
//replacement to be generated by SWIG:
%extend{
void SetSomething(ValueClass *value){
std::auto_ptr<ValueClass> tmp(value);
$self->SetSomething(tmp);
}
}
//retrieving object wrapped in auto_ptr using swig macro:
%define SWIG_RELEASE_AUTO_PTR(RETURN_TYPE, METHOD_NAME, PROTO, ARGS)
%extend {
RETURN_TYPE * METHOD_NAME PROTO {
std::auto_ptr<RETURN_TYPE> auto_result = self->METHOD_NAME ARGS;
return auto_result.release();
}
}
%enddef
// and then inside class:
// virtual auto_ptr<ValueClass> SomeMethod(const string& foo) = 0;
// replaced with:
SWIG_RELEASE_AUTO_PTR(ValueClass,SomeMethod,(const string& foo),(foo));
</code></pre>