栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++模板复习笔记一:函数模板(未完待续5/2)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++模板复习笔记一:函数模板(未完待续5/2)

文章目录
    • 一、背景设置
    • 二、函数模板
      • 1)函数模板
        • (1)基本范例
        • (2)实例化
        • (3)模板参数的推断
          • (3.1)常规的参数判断(四种方法)
          • (3.2)各种推断的比较以及空模板参数列表的推断(编译器优先调用非模板函数,也就是普通函数)
      • 2)类模板、变量模板、别名模板
      • 3)类模板的有元
      • 4)可变参模板
      • 5)多态在模板中的应用
      • 6)模板的一些特殊继承关系
      • 7)模板代码的组织结构与模板的显示实例化和声明

一、背景设置
  • 补充vstudio 2019调试快捷键
F9    增加断点
F5    开始运行调试
F10   一行一行往下执行
F11   单步执行
shift+F11  跳出某个函数
(按照窗口-》内存就可以看到取某个字符串或是整数等的地址,查看元素)
shift+F9  快速监视   可以监视某个变量的内存地址
调试->窗口->反汇编   切汇编代码
 ctrl+k+c   快速注释
  • C++语言标准设置

二、函数模板 1)函数模板 (1)基本范例
#include 

using namespace std;

namespace _nmsp1
{
	//快速注释
	//int32_t Sub(int32_t tv1, int32_t tv2)
	//{
	//	return tv1 - tv2;
	//}

	//float Sub(float tv1, float tv2)
	//{
	//	return tv1 - tv2;
	//}

	template  //T:称之为类型模板参数,T代表的是一个类型
						  //(typename语法上可以用class取代,但是这里的class只是修饰,不表示类)
	T sub(T tv1, T tv2)
	{
		return tv1 - tv2;
	}
}

int main()
{
	int32_t subv = _nmsp1::sub(3, 5);
	cout << "subv=" << subv << endl;
	double subv2 = _nmsp1::sub(4.7, 2.1);
	cout << "subv=" << subv2 << endl;
}

(2)实例化
  • 说明
    实例化:用具体的类型代替类型模板参数的过程

  • 用obj文件生成txt调试信息
    用工具Developer Command Prompt For VS 2019

dumpbin /all Myproject.obj  > MyproJect.txt

  • 实例化的函数名字

  • 函数模板中的函数要点
    1)函数体和函数声明都放在一个.h文件中

  • 指定模板参数类型

double subv = _nmsp1::Sub(3, 5.9);

(3)模板参数的推断 (3.1)常规的参数判断(四种方法)
  • 第一种调用方式
#include 

using namespace std;

namespace _nmsp1
{
	template 
	V Add(T tv1, U tv2)
	{
		return tv1 + tv2;
	}

}

int main()
{
	//指定三个模板参数的类型
	cout << _nmsp1::Add(15, 17.8) << endl;
}
  • 第二种调用方式
#include 

using namespace std;

namespace _nmsp1
{
	template 
	V Add(T tv1, U tv2)
	{
		return tv1 + tv2;
	}

}

int main()
{
	//指定三个模板参数的类型
	cout << _nmsp1::Add(15, 17.8) << endl;
}
  • 第三种:auto自动判断返回类型
#include 

using namespace std;

namespace _nmsp1
{
	template 
	auto Add(T tv1, U tv2)
	{
		return tv1 + tv2;
	}

}

int main()
{
	//指定三个模板参数的类型
	cout << _nmsp1::Add(15, 17.8) << endl;
}
  • 第四种:返回类型后置语法(这里的auto只是返回类型判断的语法组成部分,并没有类型推导)
#include 

using namespace std;

namespace _nmsp1
{
	template 
	auto Add(T tv1, U tv2)->decltype(tv1 + tv2)
	{
		return tv1 + tv2;
	}

}

int main()
{
	//指定三个模板参数的类型
	cout << _nmsp1::Add(15, 17.8) << endl;
}
(3.2)各种推断的比较以及空模板参数列表的推断(编译器优先调用非模板函数,也就是普通函数)
  • 1)自动推断
mydouble(10)
  • 2)指定推断
mydouble(10)
  • 3)指定模板参数列表(空的<>看起来没有作用,但是语法上允许,用了<.>优先调用函数模板)
auto result3 = mydouble<>(16.9);  //打印33.8
2)类模板、变量模板、别名模板 3)类模板的有元 4)可变参模板 5)多态在模板中的应用 6)模板的一些特殊继承关系 7)模板代码的组织结构与模板的显示实例化和声明
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849841.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号