我正在使用SWIG 2.0。我有一个C ++智能指针类,我希望避免使用我的目标语言(在本例中为Python)。一些类型图应该允许我这样做。这是我第一次尝试“out”类型映射,例如:
%typemap(out) smart_ptr
%{
// Get the object from the internal pointer.
if ($1.get() == NULL)
$result = Py_None;
else
$result = SWIG_NewPointerObj($1.get(), $descriptor($1_type::target_type),
0);
%}
使用此类型地图,如果有效,我应该能够将smart_ptr< Foo > getAFoo();
公开为返回Foo
的函数,而不是SmartPtrFoo
。
问题是SWIG将描述符生成为“ swigt __ 1_type__target_type”,而不是将smart_ptr< T >::target_type
扩展为Foo
以获取,例如,“ swigt _Foo”。
我可以这样做:
#define SMART_PTR_TYPEMAPS(VALUE_TYPE)
%typemap(out) smart_ptr< VALUE_TYPE >
%{
// Get the object from the internal pointer.
if ($1.get() == NULL)
$result = Py_None;
else
$result = SWIG_NewPointerObj($1.get(), $descriptor(VALUE_TYPE),
0);
%}
#enddef
但这迫使我为我使用smart_ptr的每种类型扩展一个宏。我宁愿让SWIG类型图搜索机制完成工作。
有没有办法为扩展的typedef生成描述符?