华拓科技网
您的当前位置:首页类型推导的一二件事

类型推导的一二件事

来源:华拓科技网

⛺️不负时光,不负己✈️

引言

类型推导不是重点内容,大家知道类型推导是怎么个事即可!

什么是类型推导

想必大家都用过auto这个非常受欢迎的关键字吧,「通常情况下,遇到类型复杂的变量,直接无脑auto」。

但是有时候我们也有推导出该变量是什么类型的需求。推导的过程就是类型推导
如下:

int main()
{
	auto it = [](int a, int b)->int {return a + b; };
	cout<<typeid(it).name();
}

运行结果如下:


下面👇我们有必要好好介绍一下typeid
在C++中,typeid是一个运算符,用于获取一个表达式的类型信息。它返回一个std::type_info对象,该对象包含有关该表达式的类型信息。typeid通常与auto关键字结合使用时,可以帮助开发者在运行时确定由auto推导出的变量的具体类型。

typeid的基本用法
typeid运算符的返回结果是名为type_info的标准库类型的对象的引用(在头文件typeinfo中定义)。type_info类提供了一个成员函数name(),它返回一个C风格的字符串,用来表示相应的类型名。但需要注意的是,这个返回的类型名与程序中使用的相应类型名并不一定一致,具体格式可能因编译器而异。


类型推导和函数模板相结合

前面文章中,我们介绍了函数模板和类模板,今天我们将函数模板和类型推导结合起来

没有提供任何特例化的模板

template<class T>
void func1(T a)
{
	cout << typeid(T).name() << endl;
}

我们用一个函数试一下,看看是可以推导出来该函数的返回值类型和参数类型。

int sum(int a, int b)
{
	return a + b;
}
int main()
{
	func1(sum);
}

结果如下:


部分特例化模板

针对需求,我们可以这样做:

template<class R,class A1,class A2>
void func2(R(*a)(A1, A2))
{
	cout << typeid(R).name() << endl;
	cout << typeid(A1).name() << endl;
	cout << typeid(A2).name() << endl;

}

借用上面👆的代码检验一下是否可以推导成功

因篇幅问题不能全部显示,请点此查看更多更全内容