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 应该有一个模板参数,但我不知道如何编写它。从我看到的情况来看,我可能必须使用另一个模板,但最好为两者使用相同的 T,因为我不会从 Degree_float 转换为 Radian_double。

任何人都可以对此有所了解吗?

谢谢你。

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 回答