2012-11-06 8 views
8

Dlaczego w Cython możliwe jest owinięcieCython std :: pair z dwoma wskaźnikami, oczekuje identyfikator lub dosłownego

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

ale nie

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

W szczególności, owijając w Cython się std::pair odbywa co następuje:

pair[int, Foo*] 

działa płynnie, ale gdy pierwszym elementem jest również wskaźnik, mam problem lemów:

pair[Foo*,Bar*] myPair2 

Dostaję

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

używam Cython 0.17.1, g ++ 4.4 na Linuksie

+5

Typy traktuje się tak samo w [definicji pary] (https://github.com/cython/cython/blob/master/Cython/Includes/libcpp/utility.pxd); jest to prawdopodobnie ogólne ograniczenie dla składni '[]'. Możesz spróbować obejść to za pomocą typedef: 'ctypedef Foo * Foo_pointer' – jfs

+0

Wygląda na to, że ctypedef robi lewę, dzięki – linello

+2

@ J.F.Sebastian: Powinieneś zrobić taką odpowiedź, aby mogła zostać zaakceptowana :-). –

Odpowiedz

6

rodzaje są traktowane tak samo in the pair definition; jest to prawdopodobnie ogólne ograniczenie dla składni []. Można spróbować obejść go z typedef: ctypedef Foo* Foo_pointer

Kopiuj wklejony z komentarzem @JFSebastian tak, że kwestia ta może być oznaczona jako odpowiedział (mam nadzieję, że do wyczyszczenia listy pytań bez odpowiedzi - to był miesiąc!)

+0

Ta odpowiedź wymaga więcej głosów up. Dziękuję Ci. – hlin117

Powiązane problemy