我如何将使用模板的 class 转换为使用 Double 的普通 class
how can i convert a class which uses template to a normal class which uses Double
我认为我使用 class 模板做得很好。但是一旦我开始倒退,我就遇到了一些困难。我的任务是删除 tempalte realtype class 并将其替换为普通的 double。
我真的不知道如何开始。
我的想法是简单地删除这一行
我以为一切都会正常,但我收到错误。
ArcBasis.hpp:
template <typename RealType> //line to replace
class K_Arc_Basis
{
public:
DECLARE_K_STANDARD (Arc_Basis)
private:
typedef K_Arc_Basis<Double> ThisType;
typedef K_Circle_Basis <Double> CircleType;
public:
K_Arc_Basis();
K_Arc_Basis( const CircleType& Circle );
private:
PointType m_Center;
Double m_Radius;
Double m_StartAngle;
Double m_Arc;
};
ArcBasis.inl
template <typename RealType>//line to replace
inline K_Arc_Basis<RealType>::K_Arc_Basis()
: m_Center(), m_Radius (1),
m_StartAngle( 0 ), m_Arc( 2*KSRealPi( Double(0) ) )
{
}
template <typename RealType>//line to replace
inline K_Arc_Basis<RealType>::K_Arc_Basis( const CircleType& Circle )
: m_Center( Circle.Center() ), m_Radius( Circle.Radius() ),
m_StartAngle( 0 ), m_Arc( 2*KSRealPi( Double(0) ) )
{
}
您没有在任何地方使用过模板类型,但您使用过该模板的特化(还有 K_Circle_Basis
?)。您还需要删除所有 <Double>
。
class K_Arc_Basis
{
public:
DECLARE_K_STANDARD (Arc_Basis) // what does this expand to??
private:
typedef K_Arc_Basis ThisType;
typedef K_Circle_Basis CircleType;
public:
K_Arc_Basis();
K_Arc_Basis( const CircleType& Circle );
private:
PointType m_Center; // What is PointType?
double m_Radius;
double m_StartAngle;
double m_Arc;
};
或者,您可以开始在模板中使用类型参数,并提供一些显式实例化
template <typename RealType>
class K_Arc_Basis
{
public:
DECLARE_K_STANDARD (Arc_Basis)
private:
using ThisType = K_Arc_Basis<RealType>;
using CircleType = K_Circle_Basis<RealType>;
public:
K_Arc_Basis();
K_Arc_Basis( const CircleType& Circle );
private:
PointType m_Center;
RealType m_Radius;
RealType m_StartAngle;
RealType m_Arc;
};
using K_Arc_Basis_F = K_Arc_Basis<float>; // or whatever name
using K_Arc_Basis_D = K_Arc_Basis<double>; // or whatever name
我认为我使用 class 模板做得很好。但是一旦我开始倒退,我就遇到了一些困难。我的任务是删除 tempalte realtype class 并将其替换为普通的 double。 我真的不知道如何开始。 我的想法是简单地删除这一行 我以为一切都会正常,但我收到错误。
ArcBasis.hpp:
template <typename RealType> //line to replace
class K_Arc_Basis
{
public:
DECLARE_K_STANDARD (Arc_Basis)
private:
typedef K_Arc_Basis<Double> ThisType;
typedef K_Circle_Basis <Double> CircleType;
public:
K_Arc_Basis();
K_Arc_Basis( const CircleType& Circle );
private:
PointType m_Center;
Double m_Radius;
Double m_StartAngle;
Double m_Arc;
};
ArcBasis.inl
template <typename RealType>//line to replace
inline K_Arc_Basis<RealType>::K_Arc_Basis()
: m_Center(), m_Radius (1),
m_StartAngle( 0 ), m_Arc( 2*KSRealPi( Double(0) ) )
{
}
template <typename RealType>//line to replace
inline K_Arc_Basis<RealType>::K_Arc_Basis( const CircleType& Circle )
: m_Center( Circle.Center() ), m_Radius( Circle.Radius() ),
m_StartAngle( 0 ), m_Arc( 2*KSRealPi( Double(0) ) )
{
}
您没有在任何地方使用过模板类型,但您使用过该模板的特化(还有 K_Circle_Basis
?)。您还需要删除所有 <Double>
。
class K_Arc_Basis
{
public:
DECLARE_K_STANDARD (Arc_Basis) // what does this expand to??
private:
typedef K_Arc_Basis ThisType;
typedef K_Circle_Basis CircleType;
public:
K_Arc_Basis();
K_Arc_Basis( const CircleType& Circle );
private:
PointType m_Center; // What is PointType?
double m_Radius;
double m_StartAngle;
double m_Arc;
};
或者,您可以开始在模板中使用类型参数,并提供一些显式实例化
template <typename RealType>
class K_Arc_Basis
{
public:
DECLARE_K_STANDARD (Arc_Basis)
private:
using ThisType = K_Arc_Basis<RealType>;
using CircleType = K_Circle_Basis<RealType>;
public:
K_Arc_Basis();
K_Arc_Basis( const CircleType& Circle );
private:
PointType m_Center;
RealType m_Radius;
RealType m_StartAngle;
RealType m_Arc;
};
using K_Arc_Basis_F = K_Arc_Basis<float>; // or whatever name
using K_Arc_Basis_D = K_Arc_Basis<double>; // or whatever name