关于c++中的模板

Regarding Templates in c++

本文关键字:c++ 关于      更新时间:2023-10-16

这可能是一个愚蠢的问题,但它对我来说非常重要,明天是我在面向对象C++中的期末考试,不管怎样,我的老师说了一些非常重要的事情(我记不清了),关于我在制作对象时应该指定变量或数据类型的时间,这就像<int,int,int、double、int>。。左边的所有东西都必须是相同或相反的类型,我记不清了,如果有人知道我在说什么,请帮帮我<凌晨3点绝望的

编辑:呃,我很抱歉,但我真的很害怕这次考试,这件事很重要:(不管怎样,当我从一个有模板的类中创建对象时,它会像这样class<.int,int,double。>obj1,对吧?这些数据类型在中间,有一条规则说,如果第一个类型是整数,那么它右边或左边的所有东西都必须是相同的类型,或者类似的东西,这就是我不记得的

类模板声明由名称模板参数组成。模板参数放在第一位,写在尖括号内,如下所示:

template <typename Foo, typename Bar>
class Gizmo
{
};

在这一点上,FooBar不是真实类型——它们是在实例化Gizmo时提供的真实类型的占位符。

实例化类模板首先是类名,然后是<,然后是一个逗号分隔的模板参数列表,最后是>和变量名:

Gizmo<int, double> myGizmo;

这些数据类型在中间,有一条规则说如果第一个类型是integer,那么它右边或左边的所有内容都必须是同一种类型,或者类似的东西,这就是我不记得的

不,没有这样的规则。上面的任何模板参数都可以是任何类型。以下都是合法的:

Gizmo<int, double> g1;
Gizmo<int, std::string> g2;
Gizmo<std::string, int> g3;
Gizmo<double, char> g4;

您可能想到的是默认参数。使用类模板,您可以为模板参数指定一些默认值:

template <typename Foo=int, typename Bar=double>
class Gizmo
{
};

但是,如果指定了默认模板参数,则所有后续模板参数也必须具有默认值。所以这是可以的:

template <typename Foo, typename Bar=int>
class Gizmo
{
};

但这不是:

template <typename Foo=int, typename Bar>
class Gizmo
{
};

因为Foo有默认值,但Bar没有。