【发布时间】:2023-03-12 04:05:01
【问题描述】:
我习惯于构建 C++ 程序并在 Cython 中获取它,但在这里我试图获取 C++ 11 array,它肯定不起作用。
这是我的 .pxd:
cdef extern from "<array>" namespace "std" nogil :
cdef cppclass array[T, size_t]:
ctypedef T value_type
cppclass iterator:
T& operator*()
iterator operator++()
iterator operator--()
iterator operator+(size_t)
iterator operator-(size_t)
bint operator==(iterator)
bint operator!=(iterator)
bint operator<(iterator)
bint operator>(iterator)
bint operator<=(iterator)
bint operator>=(iterator)
T& operator[](size_t)
array() except +
array(array&) except +
这个文件的大部分内容是对“vector.pxd”的改编,但我删除了分配器,因为 c++11 array 不需要它。我使用size_t 作为第二个模板参数,但我不确定。
问题是,当我这样做时:
from array11 cimport array
cdef array[int, 5] test
编译时我明白了:
模板参数中的未知类型
如果我这样做:
from array11 cimport array
cdef array[int, 5] * test = new array[int, 5]()
我明白了:
new 运算符只能应用于 C++ 类
知道我做错了什么吗?
谢谢!
【问题讨论】:
-
cython 是否支持非类型模板?
-
这可能是正确的问题!
-
@AndyG 不,它不支持非类型模板
-
其他人已经提出了一些令人满意的工作方式。看看stackoverflow.com/questions/36357024/…的要旨
-
所以没有办法实现std::array,在.pxd中没有固定大小?
标签: c++ arrays c++11 templates cython