C++ 模板元编程
文章平均质量分 72
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。
模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。
肥肥胖胖是太阳
我的人生格言:不积跬步无以至千里。
展开
-
面向对象过程中static的应用
你真的懂得“C++中的static”?面向对象过程中的static⑴ static和非static属性的类的成员变量⒈ static与非static成员变量的异同点:① 内存分配:对于非静态数据成员,他们都是类的实例化对象的成员,而静态数据成员被当作是类类型的成员。无论这个类的对象定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类型的所有对象共享访问,即静态数据成员是该类的所有对象所共有的。② 用法不同:非静态成员变量更像一个为每个特定的类对象定制的“私有饰品”,只可自己把原创 2021-01-30 21:05:27 · 209 阅读 · 0 评论 -
类的成员作模板的非类型模板参数
模板参数扩展我们前面提到:我们不可以将自定义类类型作为非类型模板参数,但是我们想想“可不可以把类的静态/非静态成员部分作为非类型模板参数呢”?① 将类类型的非静态成员作为非类型模板参数#include<iostream>usingnamespacestd;classStudent{public:intage;public:Student():age(0){};voidShowInf();...原创 2022-02-12 17:12:21 · 411 阅读 · 0 评论 -
C++的内部链接性与外部链接性&链接属性引起的相关问题(详解)
C++的内部链接性与外部链接性内部链接和外部链接是什么?内部链接——如果一个名称对编译单元来说是局部的,在链接的时候其他编译单元无法链接到它且不会与其他编译单元中的同样名称相冲突。(例如被关键字static,inline标识)外部链接——如果一个名称对编译单元来说不是局部的,而在链接的时候其他的编译单元可以访问它,也就是说它可以和别的编译单元交互。外部链接引起的异常① 重定义问题:我们先说“重定义问题”咋来的,首先,重定义顾名思义就是“在相同位置的内存空间上,重复定义了两次数据”。我原创 2021-01-27 19:25:51 · 1518 阅读 · 0 评论 -
C++模版:包含模型、显式实例化、分离模型(详解)
C++模版:包含模型、显式实例化、分离模型函数和类类型声明和定义的实质非模板类类型的分文件定义test.cpp:#include"test.h"#include<iostream>usingnamespacestd;test::test(){cout<<"调用默认构造函数"<<endl;}test::~test(){cout<<"调用析构函...原创 2021-01-26 12:09:35 · 364 阅读 · 0 评论 -
C++ Templates之技巧性基础知识
C++ Templates之技巧性基础知识目录C++ Templates之技巧性基础知识关键字typename的使用.template构造练习小项目为什么基类的成员在父类中调用必须指明作用域或者使用this->?成员模板的优势模板的特化模板的全特化(Full specialization of template)模板的偏特化(template partial specialization)函数模板的重载(类似于类模板的特化)模板的“模板参数”向模板中原创 2021-01-16 18:52:17 · 498 阅读 · 0 评论 -
非类型模板参数如何使用&非类型模板参数使用时的注意事项&如何控制模板的实例化以节省内存空间
非类型模板参数含有非类型模板参数的函数在重载时的注意事项形式一:#include<iostream>usingnamespacestd;#include<vector>#include<algorithm>template<typenameT,intval>TAddValue(Tconst&obj){returnobj+val;}in...原创 2021-01-13 19:58:13 · 1198 阅读 · 0 评论 -
如何正确的重载类类型中char*强制类型转换符?
重载类类型强制转换符时的注意事项以将类类型强制转换为char*类型为例,我们都知道强制转换为char*类型,无非就是重载operator char*(),但是我们经常没注意的是,当我们进行了如下编程,会出现出乎意料的现象(错误示例):#include<iostream>usingnamespacestd;#include<sstream>#include<string>classPerson{private...原创 2021-01-05 21:04:36 · 1133 阅读 · 0 评论 -
到底什么是“容器适配器”?
容器适配器到底是什么意思?不同场景下,由于不同的序列式容器其底层采用的数据结构不同,因此容器适配器的执行效率也不尽相同。但通常情况下,使用默认的基础容器即可。当然,我们也可以手动修改,具体的修改容器适配器基础容器的方法,请详看下面自定义Stack类演示:以Stack为例,容器适配器的意思就是底层使用的容器不同,以Stack使用vector数组为例:Person.h#pragmaonce#include<iostream>#include<sstr...原创 2021-01-05 08:48:06 · 617 阅读 · 1 评论 -
Template使用的易错点:传入不同数据类型参数时的注意事项
Template使用的易错点#include<iostream>usingnamespacestd;template<typenameT>Tconst&Max(Tconst&var1,Tconst&var2){returnvar1>var2?var1:var2;}intmain(){inta=10;float...原创 2021-01-02 21:06:40 · 723 阅读 · 0 评论 -
C++ Templates:Stack类编写(带有模板缺省值)
main函数#include "Stack.hpp"#include <iostream>using namespace std;#include <string>class Person{private: int age; string name;public: Person() = default; Person(int age, string name) { this->age = age; this->name = nam.原创 2021-01-02 20:38:36 · 226 阅读 · 0 评论