Como aplicar os mapas de tipo SWIG OUTPUT para tipos de classe em Python?

Estou tendo problemas para gerar um wrapper Python em torno de uma biblioteca C ++ usando SWIG (versão 3.0.6).

Meu problema está relacionado à aplicação do mapa de tipos OUTPUT, especificamente no caso de ponteiros / referências a tipos de classe.

Para ilustrar, é isso que eu quero para tipos padrão e funciona:

// .h
int add(const long arg1,const long arg2,long& resultLong);

// interface.i
%apply long& OUTPUT { long& resultLong };
int add(const long arg1,const long arg2,long& resultLong);

// projectWrapper.py
def add(arg1, arg2):
    return _projectWrapper.add(arg1, arg2)
addTerm = _projectWrapper.add

// usage
>>> result = projectWrapper.add(2, 4)
>>> print result
[0, 6L]

Você não precisa passar "resultLong", mas ele é anexado ao resultado automaticamente. Ótimo!

No entanto, isso não parece estar funcionando como eu esperava quando o tipo de saída é algum ponteiro para um tipo de classe:

// .h
int GetClassType(const char* name, exportedClassType*& resultPointer);

class exportedClassType
{...}

// interface.i
%apply exportedClassType*& OUTPUT { exportedClassType*& resultPointer };    
int GetClassType(const char* name, exportedClassType*& resultPointer);

// projectWrapper.py
def GetClassType(name, resultPointer):
    return _projectWrapper.GetClassType(name, resultPointer)
GetClassType = _projectWrapper.GetClassType

O problema parece ser que o SWIG não o processou da mesma maneira que o tipo simples. Ele ainda aparece como um parâmetro de "entrada" na assinatura da função agrupada.

// attempted usage
>>> classType = projectWrapper.GetClassType("name")
TypeError: GetClassType() takes exactly 2 arguments (1 given)

>>> result = 0
>>> projectWrapper.GetClassType("name", result)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: in method 'GetClassType', argument 2 of type 'exportedClassType *&'

Alguém pode me dizer o que estou fazendo de errado ou me indicar a direção certa? Qualquer ajuda recebida com gratidão! obrigado

questionAnswers(3)

yourAnswerToTheQuestion