Невозможно преобразовать 'vector ' в объект Python

Я пытаюсь обернуть функцию C ++ подписью

vector < unsigned long > Optimized_Eratosthenes_sieve(unsigned long max)

с помощью Cython. У меня есть файл sieve.h, содержащий функцию, статическую библиотеку sieve.a и мой файл setup.py следующим образом:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules = [Extension("sieve",
                     ["sieve.pyx"],
                     language='c++',
                     extra_objects=["sieve.a"],
                     )]

setup(
  name = 'sieve',
  cmdclass = {'build_ext': build_ext},
  ext_modules = ext_modules
)

В моем sieve.pyx я пытаюсь:

from libcpp.vector cimport vector

cdef extern from "sieve.h":
    vector[unsigned long] Optimized_Eratosthenes_sieve(unsigned long max)

def OES(unsigned long a):
    return Optimized_Eratosthenes_sieve(a) # this is were the error occurs

, но я получаю сообщение «Cannot convert» вектор' {TSet GetSet (); } ...

Вот что я хотел бы сделать:

public interface IRepository<TSet<TElement>> where TSet<TElement> : IEnumerable<TElement>
{
    TSet<TEntity> GetSet<TEntity>();
}

Возможна ли такая конструкция в .NET?

Редактировать : Вопрос был недостаточно ясным. Вот что я хочу сделать в расширенном виде:

public class DbRepository : IRepository<DbSet<TElement>> {
    DbSet<TEntity> GetSet<TEntity>();
}

public class ObjectRepository : IRepository<ObjectSet<TElement>> {
    ObjectSet<TEntity> GetSet<TEntity>();
}

Это означает, что я хочу, чтобы ограниченный тип: - принять один общий параметр - реализовать данный интерфейс с одним универсальным параметром.

Возможно ли это? Фактически, я буду доволен только первым делом.

public interface IRepository<TGeneric<TElement>> {
    TGeneric<TArgument> GetThing<TArgument>();
}
6
задан Jean Hominal 16 March 2011 в 16:38
поделиться