Задача
У меня есть класс шаблонов в C++, который имеет статический метод. Это выглядит более или менее, как это:Статические методы Cython C++ в классе шаблонов
template<typename T>
class Foo {
static std::shared_ptr<Foo<T>> doSth();
}
так в C++ вы могли бы назвать это нравится: Foo<Int>::doSth();
. В Cython однако, способ вызова статических методов является использование имени класса в качестве пространства имен:
cdef extern from "Bar.h" namespace "Bar":
shared_ptr[Bar] doSth() # assuming shared_ptr is already declared
, но это не имеет никакого понятия шаблонов. Очевидно, просто проходя Foo<T>
как пространство имен не работает, потому что это приводит к Foo<T>::doStr()
в C++, не конкретный тип не подменяется Т.
Как бы вы сделать это в Cython? Есть ли способ или обходной путь?
Не должны ли эта работа, как объяснено для нестатических методов в документации? http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#templates –
К сожалению, это не так. Написание 'cdef extern из пространства имен Foo.h« Foo »: shared_ptr [Foo [T]] doSth [T]()' тоже не работает. Это потому, что cython генерирует код на C++, например: 'Foo :: doSth();' - параметр шаблона после Foo отсутствует. –
piotrMocz