Sto provando a racchiudere una classe enum in un file di intestazione C++ da utilizzare in un progetto cython. Ho cercato su google e non riesco a scoprire come ottenerlo - è supportato?Wrap enum class per cython
5
A
risposta
6
classe CPP
enum class Color {red, green = 20, blue};
Definizione di tipo
cdef extern from "colors.h":
cdef cppclass Color:
pass
Definizione di tipi di colore implementazione
cdef extern from "colors.h" namespace "Color":
cdef Color red
cdef Color green
cdef Color blue
Python
cdef class PyColor:
cdef Color thisobj
def __cinit__(self, int val):
self.thisobj = <Color> val
def get_color_type(self):
cdef c = {<int>red : "red", <int> green : "green", <int> blue : "blue"}
return c[<int>self.thisobj]
0
Ecco una soluzione alternativa che utilizza la possibilità di modificare il nome degli identificatori di cython e C++.
header.hpp
namespace foo {
enum class Bar : uint32_t {
BAZ,
QUUX
};
}
header.pxd
cdef extern from "header.hpp" namespace "foo::Bar":
cdef enum Bar "foo::Bar":
BAZ,
QUUX
main.pyx
from header cimport *
cdef void doit(Bar b):
pass
doit(BAZ) # Not Bar.BAZ, which would have been nicer.
E 'efficace tellin g cython che esiste uno spazio dei nomi chiamato "foo :: Bar" e inserisce un enum di tipo C in esso. Per contrastare il fatto che Bar diventerebbe altrimenti "foo :: Bar :: Bar" a cui viene dato anche un nome sovrascritto. Significa che Bar :: BAZ viene chiamato BAZ in cython, piuttosto che Bar.BAZ che sarebbe una rappresentazione più idiomatica delle classi enum, ma sembra abbastanza vicino.
Problemi correlati
- 1. Wrap C++ lib con Cython
- 2. La differenza tra enum ed enum class?
- 3. Nuovo per Cython ... non riesco a comprendere correttamente enum
- 4. Word wrap per NSMutableAttributedString
- 5. Uilabel Word Wrap/Character Wrap
- 6. Flex-wrap polyfill per Firefox
- 7. Installazione di PyCharm per Cython
- 8. CSS no text wrap
- 9. Piani per Enum estendibili
- 10. Wrap div intorno immagine
- 11. Cython correctness
- 12. NoClassDefFoundError per MockitoInvocationHandler class
- 13. Devo usare Enum, static Class, Dictionary o Struct per rappresentare questi "float etichettati" in C#?
- 14. Crea enum esterno "pubblico" per Python?
- 15. Java valore enum personalizzato per enum
- 16. classi cython molto lente?
- 17. Tipi di Numpy per utenti Cython
- 18. File watcher per Cython in Pycharm
- 19. Propagazione C++ eccezione per Cython - eccezione pitone
- 20. Opzioni per lo sfilacciamento del codice Cython
- 21. Netbeans 7.0.1 Word Wrap
- 22. Wrap CNTK Applications
- 23. QCheckBox word-wrap
- 24. Code Wrap IntelliJ?
- 25. SyntaxHighlighter word wrap?
- 26. Zebra ZPL wrap text
- 27. str_split senza word-wrap
- 28. Meteor wrap Sintassi asincrona
- 29. Cython in Ipython: ERRORE: cell magic `%% cython` non trovato
- 30. cython numpy accumulate function
Puoi elaborare un esempio con 'cdef enum Foo: [...]' non risponde alle tue esigenze? – coincoin
Non sto eseguendo il wrapping di un c enum, ma di una classe en ++ C++ quindi non funziona – user3684792
Esegui l'enum come un 'ctypedef' e il contenuto dell'enumerazione in un namespace? (Non ho provato questo, ma sembra che potrebbe funzionare) – DavidW