0

プロジェクトの数学コードを書き込もうとしていますが、興味深い問題に遭遇しました。

template<class T> class Radian;
template<class T> class Degree;

template <class T>
class Radian
{
public:
    T mRad;
public:
    Radian(const Degree& d);
};

template <class T>
class Degree
{
public:
    T mDeg;
public:
    Degree(const Radian& d);
};

inline Radian::Radian ( const Degree& d ) 
{

}

inline Degree::Radian ( const Radian& d )
{

}

コードは大きくなりますが、理解しやすいように不要な関数を削除したことに注意してください。

テンプレートがどのように機能するかを理解しています。コンパイル時に生成されることは知っていますが、この特定の例では、使用する構文がよくわかりません。コンストラクターでDegreeにテンプレート引数が必要であるという事実を知っていますが、それをどのように書くかがわかりません。私が見たところ、別のテンプレートを使用する必要があるかもしれませんが、Degree_floatからRadian_doubleに変換しないので、両方に同じTを使用すると便利です。

誰かがこれに光を当てることができますか?

ありがとうございました。

4

1 に答える 1

5

宣言の構文は次のとおりです。

template <typename T>
class Radian
{
public:
    Radian(Degree<T> const& degree);
    …
};

そして、これは定義の構文です。

template <typename T>
inline Radian<T>::Radian(Degree<T> const& degree) {
    …
}

つまり、クラスはテンプレートであるため、その型引数を指定する必要があります。コンストラクターはテンプレートではないため、通常のコンストラクターと同じように、クラス名のプレフィックスを付けて作成します。

于 2012-07-16T15:34:38.017 に答える