泛型编程 学习笔记

这篇具有很好参考价值的文章主要介绍了泛型编程 学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

#include "iostream"

using namespace std;

template<typename T>
void Print(T a) {
	cout << a << endl;
}

int main() {
	int a = 5;
	double b = 2.3;
	char c = 'e';
	string d = "sdfasd";

	Print(a);
	Print(b);
	Print(c);
	Print(d);

	return 0;
}

泛型编程 学习笔记,学习,笔记

它可以不用Print<类型>(参数);

直接用就能直接推导,从另一种形式来讲,模板是更高级的重载

泛型编程 学习笔记,学习,笔记

但是,在类中就不适用,不能自动推导,在C++17开始才能自动推导,以上代码才不会报错


泛型编程 学习笔记,学习,笔记

为什么12行Print会报错呢,因为Print没有参数可以推导T的类型,所以必须显示的指定类型,例如int


#include "iostream"

using namespace std;

template<typename T>
void Print(T a = 123) {
	cout << a << endl;
}

int main() {
	Print<int>();
	Print<string>();

	return 0;
}

泛型编程 学习笔记,学习,笔记

泛型编程 学习笔记,学习,笔记

当参数有默认值的时候,必须类型匹配才能不输入参数 


#include "iostream"

using namespace std;

template<typename T, int T1 = 23>
void Print(T a = 123) {
	cout << a << " " << T1 << endl;
}

int main() {
	Print<int>();
	Print<int, 45>(44);
	Print<string>("fgsd");

	return 0;
}

泛型编程 学习笔记,学习,笔记

作为模板也可以当作参数,一定支持整型、枚举以及指针,其它根据编译器情况可能有不同


泛型编程 学习笔记,学习,笔记

函数里面不能做特化,类里面可以 


运算符重载:

泛型编程 学习笔记,学习,笔记

#include "iostream"

using namespace std;

class Test {
public:
	Test(int c, int d) : a(c), b(d) {}
	const Test operator+(const Test& test) {
		return Test(this->a + test.a, this->b + test.b);
	}
	inline const int Geta() const { return a; }
	inline const int Getb() const { return b; }
private:
	int a;
	int b;
};

int main() {
	Test test1(10, 20);
	Test test2(30, 50);
	const Test&& test3 = test1 + test2;
	cout << test3.Geta()<< " " << test3.Getb() << endl;

	return 0;
}

 

template <typename Type>
	void PrintNotEdit(Type Value)
	{
		FString ValueAsString;
		if constexpr (std::is_same<Type, int>::value)
		{
			ValueAsString = FString::Printf(TEXT("%d"), Value);
		}
		else if constexpr (std::is_same<Type, float>::value)
		{
			ValueAsString = FString::Printf(TEXT("%f"), Value);
		}
		else if constexpr (std::is_same<FString, Type>())
		{
			ValueAsString = FString::Printf(TEXT("%s"), *Value);
		}
		if (GEngine)
		{
			GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Red, ValueAsString);
		}
	}

	template<typename T>
	void Printf(T t) {
		PrintNotEdit(t);
	}

	template<typename T, typename ...ARGS>
	void Printf(T t, ARGS... args) {
		PrintNotEdit(t);
		Printf(args...);
	}

这里必须用constexpr,因为模板要运行时态才能有具体内容,加constexpr该成编译就取值,就能做对应操作了文章来源地址https://www.toymoban.com/news/detail-667335.html

到了这里,关于泛型编程 学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TypeScript 学习笔记 环境安装-类型注解-语法细节-类-接口-泛型

    JavaScript的变量类型相当于是动态类型,可以跟随着赋值的改变而类型改变,函数的参数也没有设定类型,所以在定位错误以及安全性上不太够。 说明 1.TS不能被JS解析器直接执行,需要编译成JS执行 2.即使TS编译出错也可以编译成JS 1.TypeScript是什么? TypeScript 是类型安全的Ja

    2024年02月16日
    浏览(74)
  • C#学习笔记--数据结构、泛型、委托事件等进阶知识点

    ArrayList 元素类型以Object类型存储,支持增删查改的数组容器。 因而存在装箱拆箱操作,谨慎使用。 ArrayList和数组区别? ArrayList使用不用说明固定长度,数组则需要 数组存储的是指定类型的,ArrayList是Object ArrayList存在装箱拆箱,数组不存在 ArrayList数组长度用Count获取 而数组

    2024年02月08日
    浏览(47)
  • java—泛型编程

    首先什么是泛型呢?从字面上我们可以理解为广泛的类型,有一定c++基础的程序猿们应该了解,java中的泛型其实就是c++的模板但是使用起来比模板更加简单,那么没有c++基础的呢也没关系,其实泛型它在我们未来的编程中是经常使用的,我们在未来中呢其实并不知道某个方法

    2024年02月21日
    浏览(33)
  • GO - 泛型编程

    泛型即开发过程中编写适用于所有类型的模板,只有在具体使用的时候才能确定其真正的类型 。随着Go 1.18版本的发布,泛型正式成为了Go语言的一部分。 在编写代码时,我们经常会遇到需要处理不同类型的数据的情况。传统上,我们需要为每种类型编写不同的函数或数据结

    2024年04月11日
    浏览(32)
  • 【C++】泛型编程——模板进阶

    在之前的文章里,我们进行了模板初阶的学习( 【C++】泛型编程——模板初阶),了解了什么是泛型编程,学习了函数模板和类模板。 那这篇文章,我们继续学习模板进阶的内容的学习。 首先我们来回顾一下: 我们在模板初阶的学习中,定义模板参数是怎么定义的? 是不

    2024年02月16日
    浏览(33)
  • C++ 泛型编程:函数模板

    当需要编写通用的代码以处理不同类型的数据时,C++ 中的函数模板是一个很有用的工具。函数模板允许我们编写一个通用的函数定义,可以用于多种不同的数据类型,从而提高代码的重用性和灵活性。 泛型编程 是一种编程范式,旨在实现可重用、通用性高的代码。它允许我

    2024年02月12日
    浏览(40)
  • C++泛型编程之模板

    目录 一、什么是泛型编程  二、函数模板 2.1函数模板的概念 2.2函数模板格式 2.3函数模板的原理  2.5函数模板的实例化 2.6模板参数的匹配原则 三、类模板 3.1类模板的定义格式 3.2 类模板的实例化 四、非类型模板参数 五、模板的特化 5.1模板特化的概念: 5.2函数模板特化 5

    2024年02月07日
    浏览(37)
  • C++——模板初阶与泛型编程

    🌸作者简介: 花想云 ,在读本科生一枚,致力于 C/C++、Linux 学习。 🌸 本文收录于 C++系列 ,本专栏主要内容为 C++ 初阶、C++ 进阶、STL 详解等,专为大学生打造全套 C++ 学习教程,持续更新! 🌸 相关专栏推荐: C语言初阶系列 、 C语言进阶系列 、 数据结构与算法 本章我们

    2023年04月17日
    浏览(36)
  • 第十二站(20天):C++泛型编程

    C++提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类, 其 类内部的类型和函数的形参类型不具体指定 ,用一个虚拟的类型来代表。这种通用的方式称 为模板。 模板是泛型编程的基础, 泛型编程即以一种独立于任何特定类型的方式编写代码 如: vect

    2024年01月22日
    浏览(33)
  • 【C++】——模板(泛型编程+函数模板+类模板)

    之前我们学习了函数重载,让我们在写相似函数的时候非常方便,但函数重载还有很多不足的地方,比如,每次写相似函数的时候,都要我们重新重载一个逻辑、代码几乎一样的函数,这就导致了我们的效率变低,所以我们今天来学习C++模板的相关知识点,学习完模板之后,

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包