Mat*_*und 5 c++ python templates cython
我对cython相当陌生,并且尝试包装定义为
template < typename T, uint N >
struct Vector{}
Run Code Online (Sandbox Code Playgroud)
而且我很难了解cython如何使用模板,尤其是那些以int为参数的模板。我在文档中读到,尚不支持将int作为模板参数。如何正确执行此操作?
我找到了一个简单的解决方案!
在 C++ 头文件中,您可以只声明一个 typedef,例如
typedef Vector<float,3>; Vector3f;
Run Code Online (Sandbox Code Playgroud)
在您的 cython 文件中,您可以声明这一点,现在您可以使用类中的所有函数和运算符。
cdef extern from "Vector.h" namespace "ns":
cdef cppclass Vector3f:
Run Code Online (Sandbox Code Playgroud)
现在,我遇到了一个额外的问题,那就是“专门”函数,在我的例子中,是具有 3 个参数的 Vector 的专门化。
template<typename T1, typename T2>
inline Vector<T1, 3 >Cross(const Vector <T1, 3 > & v1, const Vector<T2, 3> & v2)
Run Code Online (Sandbox Code Playgroud)
要在 cython 中使用它,只需在类之外声明它,在我的例子中
cdef extern from "Vector.h" namespace "ns":
cdef cppclass Vector3f:
...
Vector3f Cross(Vector3f v1,Vector3f v2)
Run Code Online (Sandbox Code Playgroud)
出于好奇,Cython wiki展示了如何在 Cython 中编写模板化类:
cdef extern from "<vector>" namespace "std":
cdef cppclass vector[T]:
...
Run Code Online (Sandbox Code Playgroud)
此外,多个模板参数被定义为一个列表。要回答 OP 的问题,可以使用cdef struct Vector[T, N].
| 归档时间: |
|
| 查看次数: |
1057 次 |
| 最近记录: |