我如何将使用模板的 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