我正在尝试为项目编写一些数学代码,我偶然发现了一个有趣的问题:
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会很好。
有人可以对此有所了解吗?
谢谢。
答案 0 :(得分:5)
这是声明的语法:
template <typename T>
class Radian
{
public:
Radian(Degree<T> const& degree);
…
};
这是定义的语法:
template <typename T>
inline Radian<T>::Radian(Degree<T> const& degree) {
…
}
也就是说,由于您的类是模板,因此您需要指定其类型参数。构造函数不一个模板,所以你像普通的构造函数一样编写它,只是以它的类名为前缀。