65.9K
CodeProject 正在变化。 阅读更多。
Home

模板编程

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.27/5 (9投票s)

2002年3月25日

2分钟阅读

viewsIcon

146751

正如我们已经知道的,继承是一种重用代码的好方法。然而,Visual C++ 提供了另一种重用代码的方式。我们可以通过模板来实现。使用模板,你可以使“类型”成为参数。让我来解释一下。

引言

正如我们已经知道的,继承是一种重用代码的好方法。然而,Visual C++ 提供了另一种重用代码的方式。我们可以通过模板来实现。使用模板,你可以使“类型”成为参数。让我来解释一下。当你有一个显示所有处理器信息的类时,这个类非常庞大,并且它使用所有的整数。如果将来整数无法存储处理器的信息(仅仅是因为它超出了整数的范围),会怎么样?现在你需要检查所有的代码,并将整数更改为长整型。或者当你有一个处理整数数组的类,并且有一天你需要完全相同的类,只是你想让它处理浮点数。

详细说明

对于这些问题,我们有模板。让我向你展示一些代码

class CMyIntArray
{ 
public: 
    int GetSize();//gets the size of the array int 
    SetSize();//sets the size of the array 
    void Add(int Value);//adds a value to the array etc...
}

正如从这段代码中可以看出,你无法用这个类处理浮点数。一个浮点数类看起来会是这样

class CMyFloatArray
{ 
public: 
    int GetSize();//gets the size of the array int 
    SetSize();//sets the size of the array 
    void Add(float Value);//adds a value to the array etc...
}

好的,我们可以处理这么一点小的改动……但是如果你有很多函数,并且我们需要相同的类来处理短整型、字符等等呢?

你可能知道旧的 C 宏(#define),基于模板的编程就像那样(在某种程度上)。但是,类型宏不是类型安全的,模板是类型安全的。如果你想知道如何创建一个模板,请查看下面的代码

//Use of templates in Visual C++ by Clemens Timmermans (maxcode.com)
template <typename Type>
class CMyArray
{ 
public:
    void Add(Type Value);
    int GetSize();
    int SetSize();
};

这不是很简单吗?现在让我们看看如何使用这个模板,通过以下代码片段

    ...
    // USING CMyArray
    CMyArray <int> iArray;
    iArray.Add(100);
    ////////////////////
    CMyArray<float> fArray;
    fArray.Add(10.2);
    /////////////////////
    ...
    //you got the point of basic template use!

不,最后,我们也可以将模板用作容器。请查看以下代码

class CMercedes
{
public:
    int GetMaxSpeed();//this gets the max speed of the car
    void SpeedUp();
    CMercedes();
    virtual ~CMercedes();
}

在基于模板的编程中,无论品牌是什么,我们都会这样编写。

//what if we want to create a template class 
//which needs to take any valid car

template <typename MyCar>
class CTemplateCar
{
private:
    MyCar theCar;
public:
    CTemplateCar(){}
    virtual ~CTemplateCar(){}
    void SpeedUpWhateverCarWeLike()
    {
        theCar.SpeedUp();
    }
}

现在,当我们想使用模板时,使用这段代码来使用它!

    ...
    CTemplateCar<CMercedes>  car;
    car.SpeedUpWhateverCarWeLike();
    CTemplateCar<CFerrari>  car2;
    car2.SpeedUpWhateverCarWeLike();
    ...

我希望这篇文章能帮助你理解基于模板的编程的含义,但最重要的是,如何使用它以及为什么使用它。

基于模板的编程 - CodeProject - 代码之家
© . All rights reserved.