класс С++ в плавном типе

Я хочу реализовать оболочку python для множества классов С++. Где-то в pxd у меня есть:

cdef cppclass FooImpl1:
    FooImpl1()
    int foo()

cdef cppclass FooImpl2
    FooImpl2()
    int foo()

Интересно, могу ли я написать что-то подобное в оболочке pyx python:

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()

Есть ли способ добиться ожидаемого поведения? FooImpl1 и FooImpl2 не имеют общего абстрактного интерфейса, они являются шаблонными специализациями класса.


person DikobrAz    schedule 15.11.2012    source источник


Ответы (1)


Начиная с этой версии (0.20), Cython не поддерживает объединенные типы в классах, только в параметрах функций и переменных. Вот документы.

person ratiotile    schedule 24.03.2014