clase c ++ en tipo fusionado
Deseo implementar el envoltorio de Python para un grupo de clases de c ++. En algún lugar de pxd tengo:
cdef cppclass FooImpl1:
FooImpl1()
int foo()
cdef cppclass FooImpl2
FooImpl2()
int foo()
Me pregunto si puedo escribir algo como esto en pyx python wrapper:
ctypedef fused FooImpl:
FooImpl1*
FooImpl2*
cdef class Foo:
cdef FooImpl impl
def __cinit__(self, int selector):
if selector == 1:
self.impl = new FooImpl1()
else:
self.impl = new FooImpl2()
def func(self):
# depending on the object stored in impl FooImpl2::foo or FooImpl1::foo
# will be called
return self.impl.foo()
¿Hay alguna manera de lograr el comportamiento esperado? FooImpl1 y FooImpl2 no comparten una interfaz abstracta, son especializaciones de plantilla de una clase.