Cython C++模板

11

我对Cython还比较新,我试图包装一个模板向量类,定义如下:

template < typename T, uint N >   
struct Vector{}

我发现学习Cython如何使用模板很困难,特别是那些带有int作为参数的模板。我在文档中读到,目前还不支持使用int作为模板参数。请问我应该如何正确地处理这个问题?


如果你想记录编程探索的过程,建立一个博客可能更好。Stack Overflow旨在成为一个问答网站! - Mark Brownsword
哦,好的。谢谢!我只是在这里发布了它,因为我经常在这里寻找答案,并且我认为有一个答案会很好:) 我将在未来设置博客。 - Matt Ostlund
@MattOstlund 您完全可以回答自己的问题。但是,如果您这样做,请将其发布为问题和答案。 - DavidW
我投票关闭此问题,因为它实际上并不是一个问题。可能可以将其重写为问题和答案,或者更适合用于文档。 - DavidW
谢谢您的建议。这是我在Stack Exchange上的第一篇帖子,我已将其修正为问题和答案。请原谅我的失误。 - Matt Ostlund
@MattOstlund 看起来更好了! - DavidW
2个回答

10

如果您感兴趣,Cython wiki 显示了如何在Cython中编写模板类:

cdef extern from "<vector>" namespace "std":
    cdef cppclass vector[T]:
        ...

此外,多个模板参数被定义为列表。 要回答OP的问题,可以使用 cdef struct Vector[T,N] 。

5

我找到了一个简单的解决方案!

在C++头文件中,你可以声明一个typedef,例如

typedef Vector<float,3>; Vector3f;

在您的Cython文件中,您只需声明它,现在您可以使用类中的所有函数和运算符。
cdef extern from "Vector.h" namespace "ns":
    cdef cppclass Vector3f:

现在,我有一个额外的问题,那就是针对“专门”的函数,对于我的情况是针对具有3个参数的向量的特化。

template<typename T1, typename T2>
inline Vector<T1, 3 >Cross(const Vector <T1, 3 > & v1, const Vector<T2, 3> & v2)

要在Cython中使用它,只需在类外部声明它,例如我的情况:
cdef extern from "Vector.h" namespace "ns":

    cdef cppclass Vector3f:

        ...

    Vector3f Cross(Vector3f v1,Vector3f v2)

谢谢 :) 我不知道那是一个选项。我在这里发布和回答问题还是比较新的。不过我经常用 CodeExchange 进行研究。 - Matt Ostlund
重新激活这篇旧帖子,但这里的点之间是什么? - cvanelteren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接