Я пытаюсь обернуть функцию 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 Вот что я хотел бы сделать: Возможна ли такая конструкция в .NET? Редактировать : Вопрос был недостаточно ясным. Вот что я хочу сделать в расширенном виде: Это означает, что я хочу, чтобы ограниченный тип:
- принять один общий параметр
- реализовать данный интерфейс с одним универсальным параметром. Возможно ли это? Фактически, я буду доволен только первым делом. public interface IRepository<TSet<TElement>> where TSet<TElement> : IEnumerable<TElement>
{
TSet<TEntity> GetSet<TEntity>();
}
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>();
}