您的位置:首页 > 游戏 > 手游 > 自己制作游戏的app_免备案虚拟主机哪家好_文员短期电脑培训_郑州品牌网站建设

自己制作游戏的app_免备案虚拟主机哪家好_文员短期电脑培训_郑州品牌网站建设

2024/12/23 8:03:38 来源:https://blog.csdn.net/m0_73949707/article/details/143997811  浏览:    关键词:自己制作游戏的app_免备案虚拟主机哪家好_文员短期电脑培训_郑州品牌网站建设
自己制作游戏的app_免备案虚拟主机哪家好_文员短期电脑培训_郑州品牌网站建设

参考文献:C++模板全特化,偏特化(局部特化)_c++ 偏特化-CSDN博客

                  C++ 模板特化与偏特化_模板偏特化-CSDN博客

                

模板特化

定义

模板特化是指为特定的模板参数类型提供一个专门的实现。当使用这个特定类型时,编译器会优先选择这个特化版本,而不是通用的模板定义。模板特化有时也称之为模板的具体化,分为函数模板特化和类模板特化。

函数模板特化

假设我们有一个简单的模板函数,用于比较两个值是否相等

template<typename T>
bool isEqual(T a, T b) {return a == b;
}

但是当处理指针类型时,上述代码比较的是指针的值(地址),如果我们想要比较指针所指向的值是否相等,就可以对指针类型进行特化

#include<iostream>
using namespace std;
template<typename T>
bool isEqual(T a, T b) {return a == b;
}template<>
bool isEqual<int*>(int* a, int* b) {return *a == *b;
}
int main() {int a = 2;int b = 2;cout << isEqual(&a, &b) << endl;
}

类模板特化

#include<iostream>
using namespace std;
template<typename T,typename U>
class A {
public:T first;U second;A(T t,U u):first(t),second(u){}void printf_A() {cout << first << " " << second << endl;}
};template<>
class A<int, int> {
public:int first;int second;A(int t, int u) :first(t), second(u) {}void printf_A() {cout << first << " " << second << endl;}
};
int main() {A<string, string> a("张三", "李四");//使用普通类模板a.printf_A();A<int, int> b(1, 2);//使用特化的类模板b.printf_A();}

模板偏特化

定义

模板偏特化是一种对模板部分参数进行特化的机制。与模板特化不同的是,它不是为所有模板参数指定具体类型,而是只对其中的一部分参数进行特殊化处理。这种方式在处理具有多个模板参数的模板(特别是类模板)时非常有用,可以根据部分参数的特性来提供不同的模板实现,从而更好地适应复杂的类型组合。

偏特化从两个方面说起,一个是从模板参数数量上,一个是从模板参数的范围上

数量上:

#include <iostream>using namespace std;
template<typename T, typename U, typename W>
struct TCP
{void testfunc(){cout << "TCP普通版本" << endl;}
};template<typename U> 
struct TCP<int, U, double>
{void testfunc(){cout << "TCP int, U, double 偏特化版本" << endl;}
};
int main()
{TCP<int, double, int> tcp;tcp.testfunc();TCP<int, double, double> tcp1;tcp1.testfunc();
}

范围上:

#include <iostream>using namespace std;
template<typename T>
struct TC1
{void testfunc(){cout << "TC1普通版本" << endl;}
};
//模板参数范围上的特化版本。
template<typename T>
struct TC1<const T>//const T的特化版本
{void testfunc(){cout << "TC1 const T的特化版本" << endl;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com