2012-11-06 9 views
8

Perché in Cython è possibile avvolgereCython std :: coppia di due puntatori, prevede un identificatore o letterale

std::pair<int, Foo*> myPair; 

ma non

std::pair<Foo*,Bar*> myPair; 

In particolare, avvolgendo nel Cython il std::pair è fatto come segue:

pair[int, Foo*] 

e funziona correttamente, ma quando il primo elemento di è anche un puntatore ho prob LEMS:

pair[Foo*,Bar*] myPair2 

mi sto

pair[Foo*,Bar*] myPair2 
     ^
------------------------------------------------------------ 
test.pyx:50:17: Expected an identifier or literal 

sto usando Cython 0.17.1, g ++ 4.4 per Linux

+5

I tipi sono trattati allo stesso modo in [la definizione 'pair'] (https://github.com/cython/cython/blob/master/Cython/Includes/libcpp/utility.pxd); è probabilmente una limitazione generale per la sintassi '[]'. Potresti provare a risolverlo con un typedef: 'ctypedef Foo * Foo_pointer' – jfs

+0

Sembra che il ctypedef faccia il trucco, grazie – linello

+2

@ J.F.Sebastian: dovresti fare una risposta in modo che possa essere accettata :-). –

risposta

6

I tipi sono trattati allo stesso in the pair definition; è probabilmente una limitazione generale per la sintassi []. Si potrebbe provare a aggirare con un typedef: ctypedef Foo* Foo_pointer

copia incollato da un commento di @JFSebastian in modo che questa domanda può essere contrassegnata come risposta (si spera chiarire l'elenco delle domande senza risposta - è stato un mese!)

+0

Questa risposta richiede più voti. Grazie. – hlin117