如何为typedef创建SWIG描述符?

时间:2014-03-16 05:04:54

标签: swig

我正在使用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生成描述符?

0 个答案:

没有答案