C++模板超详细介绍

 更新时间:2022年09月09日 10:34:09   作者:AKA.瞳源治  
C++语言的模板技术包括函数模板和类模板,模板技术是一种代码重用技术,函数和类是C++语言中两种主要的重用代码形式,这篇文章主要介绍了C++函数模板和类模板,需要的朋友可以参考下

1.前言

模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。

模板是创建泛型类或函数的蓝图或公式。

通常有两种形式:函数模板和类模板;

2.函数模板

函数模板针对仅参数类型不同的函数

一般形式为:

template <类型形式参数表> 
类型 函数名( 形式参数表)
{
   // 函数的主体
}

函数调用实例:

#include <iostream>
#include <string>
using namespace std;
template <typename T>
inline T const& Max(T const& a, T const& b)
{
	return a < b ? b : a;
}
int main()
{
	int x1 = 114514;
	int x2 = 121212;
	cout << "Max: " << Max(x1, x2) << endl;//隐式调用
    int x3 = 114514;
	int x4 = 'a';
    //cout << "Max: " << Max(x3, x4) << endl;//无法通过编译
	cout << "Max: " << Max<int>(x3, x4) << endl;//显示调用 
	double f1 = 13.5;
	double f2 = 24.6;
	cout << "Max: " << Max(f1, f2) << endl;
	string s1 = "Yuta";
	string s2 = "Rokka";
	cout << "Max: " << Max(s1, s2) << endl;
	return 0;
}

根据此样例我们得注意:

1. 函数模板分为两种调用方式:

显示模板实参调用(显示调用),隐式模板实参调用(隐式调用)。

2.隐式调用不需要显示给出模板参数,直接经过参数推演进行调用。

3. 显示调用则不需要推演直接根据显示给出的模板参数进行调用。

x3和x4因为类型不同,在比较中因为函数无法从这两个参数中进行类型推演,所以不能进行。

所以一般建议调用时采取显示调用,便于代码的理解和维护。

结果:

3.类模板

类模板针对仅数据成员和成员函数类型不同的类。

对于类模板的使用而言,没有隐式模板实参和显式模板实参使用的说法,因为类模板的使用必须显示指明模板实参。

一般形式为:

template <class type> 
class 类名 {
.
.
.
}

样例:

#include <iostream>
using namespace std;
template<typename T>
class A {
private:
	T num;
public:
	A() 
	{
		num = T(6.6667);
	}
	void print() 
	{
		cout << "num:" << num << endl;
	}
};
int main() {
	A<int> a; //显示模板实参的隐式实例化
	a.print();
}

需要注意,此时我们调用模板类的时候,必须是以显示调用的方式来进行,不然会经典报错。

解决方法便是显示给出模板参数 啦

样例结果:

到此这篇关于C++模板超详细介绍的文章就介绍到这了,更多相关C++模板内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++单一职责原则示例代码浅析

    C++单一职责原则示例代码浅析

    我们在设计一个类时要学会发现职责,并把那些职责相互分离,其实要去判断是否应该分离出一个类来并不难,前面说过,一个类应该只有一个引起它变化的原因,如果你能想到其它的原因也能去改变这个类,那么这个类就具有多于1个的职责,就应该考虑类的职责分离
    2023-02-02
  • C++ AnimeGAN实现照片一键动漫化

    C++ AnimeGAN实现照片一键动漫化

    AnimeGAN是是由神经网络风格迁移加生成对抗网络(GAN)而成,它是基于CartoonGAN的改进,并提出了一个更加轻量级的生成器架构。本文将介绍如何运用AnimeGAN实现照片一键动漫化,需要的可以参考一下
    2021-11-11
  • 详解C++设计模式编程中对状态模式的运用

    详解C++设计模式编程中对状态模式的运用

    这篇文章主要介绍了C++设计模式编程中对状态模式的运用,状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类,需要的朋友可以参考下
    2016-03-03
  • C语言数据结构与算法时间空间复杂度基础实践

    C语言数据结构与算法时间空间复杂度基础实践

    这篇文章主要为大家介绍了C语言数据结构与算法中时间空间复杂度的基础实践,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • 详解C语言如何计算结构体大小(结构体的内存对齐)

    详解C语言如何计算结构体大小(结构体的内存对齐)

    结构体的内存对齐是有关结构体内容的很重要一个知识点,主要考察方式是计算结构体的字节大小,所以本文就给大家详细介绍一下C语言如何计算结构体大小,文中的代码示例介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • C++ 内联函数inline案例详解

    C++ 内联函数inline案例详解

    这篇文章主要介绍了C++ 内联函数inline案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • C语言实现简单学生成绩管理系统

    C语言实现简单学生成绩管理系统

    这篇文章主要为大家详细介绍了C语言实现简单学生成绩管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • windows下如何安装OpenCL

    windows下如何安装OpenCL

    这篇文章主要介绍了windows下如何安装OpenCL,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • C语言进阶之文件操作详解

    C语言进阶之文件操作详解

    这篇文章主要为大家详细介绍了C语言进阶之文件操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 一张图总结C++中关于指针的那些事

    一张图总结C++中关于指针的那些事

    今天小编就为大家分享一篇关于一图总结C++中关于指针的那些事,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02

最新评论