mi hanno un tipo C++ come:Wrapping tipi su modelli annidati in NIM
template <typename T>
class Vector {
struct Iterator {
};
};
E in C++ posso usare Iterator
come Vector<int>::Iterator
.
Come si impacchetta per usarlo da Nim? c2nim emette
type Vector[T] {.importcpp...} = object
type Iterator[T] {.importcpp...}
che non compilato perché NIM non ha nidificati tipi, e produrrebbe Vector<T>::Iterator<T>
anziché Vector<T>::Iterator
.
posso usare tipi non nidificati in Nim:
type VectorIterator[T] {.importcpp: "Vector::Iterator".}
var v : VectorIterator[cint]
E questo produce naturalmente Vector::Iterator<int>
, che è sbagliato (dovrebbe essere Vector<int>::Iterator
).
C'è un modo per modificare le specifiche di importazione per produrre l'output corretto?
Che funzionerebbe se volessi avvolgere 'Foo :: Bar'. Non so come farlo funzionare con 'Foo :: Bar'. –
dhasenan
Un esempio più concreto potrebbe aiutare a capire il tuo caso d'uso. Non sono sicuro del motivo per cui la differenza tra "Foo :: Bar" e "Foo :: Bar" è importante per te. –
endragor
Esempio aggiornato. Vector :: Iterator utilizza Vector come spazio dei nomi e Vector è un modello non giustificato, non un tipo o uno spazio dei nomi. È illegale utilizzare modelli non confermati in C++. Quindi utilizza Iterator come modello e Iterator non è un modello, ma solo un tipo all'interno di un tipo di modello. Vector :: Iterator è una struttura all'interno di un modello istanziato e funziona come previsto. Questo non è uno strano caso limite della lingua; chiunque abbia lavorato con STL ha visto un std :: vector :: iterator. –
dhasenan