关于c++中的模板
Regarding Templates in c++
这可能是一个愚蠢的问题,但它对我来说非常重要,明天是我在面向对象C++中的期末考试,不管怎样,我的老师说了一些非常重要的事情(我记不清了),关于我在制作对象时应该指定变量或数据类型的时间,这就像<int,int,int、double、int>。。左边的所有东西都必须是相同或相反的类型,我记不清了,如果有人知道我在说什么,请帮帮我<凌晨3点绝望的
编辑:呃,我很抱歉,但我真的很害怕这次考试,这件事很重要:(不管怎样,当我从一个有模板的类中创建对象时,它会像这样class<.int,int,double。>obj1,对吧?这些数据类型在中间,有一条规则说,如果第一个类型是整数,那么它右边或左边的所有东西都必须是相同的类型,或者类似的东西,这就是我不记得的
类模板声明由名称和模板参数组成。模板参数放在第一位,写在尖括号内,如下所示:
template <typename Foo, typename Bar>
class Gizmo
{
};
在这一点上,Foo
和Bar
不是真实类型——它们是在实例化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
没有。
相关文章:
- 一个关于在C++中重载布尔运算符的问题
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 关于std::move的使用,是否有编译警告
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 关于C++中具有多重继承"this"指针的说明
- 关于 c++ 函数中指针赋值的简单问题
- 关于 std::min, std::max 中的比较运算符的混淆
- 这是关于成员访问规则的正确摘要吗
- C++ 关于指针取消引用的技术问题
- std::is_trivially_copyable_v 关于虚拟功能
- 关于指向指针数组的指针
- 关于复制构造函数的一个棘手问题
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 关于类的 Python 文档 - 对C++的引用不正确
- 关于 C++ 中的函数类型定义
- 关于条件块的问题与&&运算符有关
- 关于如何使用指向主窗口的指针的 QT 问题
- [temp.variadic]中关于包扩展实例化的措辞