2016-10-29 8 views
3

は私がcythonがかなり新しいです、と私はCython C++テンプレート

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

として定義テンプレートベクトルクラスをラップしようとしていたと私はcythonは特に、持つものをテンプレートを使用する方法についての学習に困難な時期を持っていますintを引数として指定します。私は文書で、intがまだテンプレートパラメータとしてサポートされていないことを読んでいます。どのようにこれを正しく行うのですか?

+0

プログラミングでの探索を文書化したい場合は、ブログをセットアップする方が良いかもしれません。スタックオーバーフローは、質問と回答のサイトとして意図されています! –

+0

OH ok。ありがとう!私はちょうどここに投稿しました。なぜなら、私はいつも答えを見ていて、答えが得意だと思ったからです。私は将来、ブログをセットアップします。 –

+0

@MattOstlund [あなた自身の質問に完全に歓迎](http://stackoverflow.com/help/self-answer)。しかし、あなたがそれをしたら、質問と回答として投稿してください。 – DavidW

答えて

3

私は簡単な解決策を見つけました。 C++のヘッダファイルで

、あなただけの一例あなたcythonファイルで

typedef Vector<float,3>; Vector3f; 

のためにあなただけのことを宣言することができ、今あなたは、クラス内のすべての関数と演算子を使用することができ、typedefを宣言することができます。

cdef extern from "Vector.h" namespace "ns": 
    cdef cppclass Vector3f: 

今、私は追加の問題を持っていた、それは私の場合には、「専門化」の機能と3つのparamsを持つベクターのための専門です。

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) 
+0

あなた自身の答えを受け入れることを検討してください... –

+0

ありがとうございます:)私はそれがオプションだったか分からなかった。私はまだここに投稿し答えるのがかなり新しいです。私は研究のためにトンのためにcodeexchangeを使用しました。 –

1

に、Cython wikiはCythonでテンプレートクラスを作成する方法を示しています。

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

さらに、複数のテンプレートパラメータがリストとして定義されています。 OPの質問に答えるには、cdef struct Vector[T, N]を使用します。