首页 > 其他分享 >模板的局限性

模板的局限性

时间:2024-12-06 23:11:06浏览次数:2  
标签:p2 p1 name age Person 局限性 模板

局限性:
模板的通用性并不是万能的
例如:

template<typename T>
void f(T a,T b)
{
    a=b;
}

在上述代码中提供的赋值操作,如果传入的a和b是一个数组,就无法实现了

再例如:

template<typename T>
void f(T a,T b)
{
    if (a>b)
    {
        .....
    }
    
}

在上述代码中,如果T的数据类型传入的是像Person这样的自定义数据类型,也无法正常运行
因此C++为了解决这种问题,提供模板的重载,可以为这些特定的类型提供具体化的模板

#include <iostream>
using namespace std;
#include <string>

//模板的局限性
//模板并不是万能的,有些特定数据类型,需要用具体化方式做特殊实现

class Person
{
public:
    Person(string name,int age)
    {
        this->m_name=name;
        this->m_age=age;
    }
    //姓名
    string m_name;
    //年龄
    int m_age;
};

//对比两个数据是否相等函数
template<typename T>
bool myCompare(T &a,T &b)
{
    if (a==b)
    {
        return true;
    }
    else
    {
        return false;
    }
}
//利用具体化Person的版本实现代码,具体化优先调用
template<> bool myCompare(Person &p1,Person &p2)
{
    if (p1.m_name==p2.m_name&&p1.m_age==p2.m_age)
    {
        return true;
    }
    else
    {
        return false;
    }
}
void test02()
{
    Person p1("Tom",10);
    Person p2("Tom",10);
    bool res=myCompare(p1,p2);
    if (res)
    {
        cout<<"p1==p2"<<endl;
    }
    else
    {
        cout<<"p1!=p2"<<endl;
    }
}
void test01()
{
    int a=10;
    int b=20;
    bool res=myCompare(a,b);
    if (res)
    {
        cout<<"a==b"<<endl;
    }
    else
    {
        cout<<"a!=b"<<endl;
    }
}
int main()
{
    //test01();
    test02();
    return 0;
}

总结:
利用具体化的模板,可以解决自定义类型的通用化
学习模板并不是为了写模板,而是在STL能够运用系统提供的模板

标签:p2,p1,name,age,Person,局限性,模板
From: https://www.cnblogs.com/RX1Ri/p/18591550

相关文章

  • 普通函数与函数模板调用规则2
    2.可以通过空模板参数列表强制调用函数模板voidmyPrint(inta,intb){cout<<"调用的是普通函数"<<endl;}template<typenameT>voidmyPrint(Ta,Tb){cout<<"调用的模板"<<endl;}voidtest01(){inta=10;intb=20;......
  • 普通函数与函数模板调用规则
    1.如果函数模板和普通函数都可以调用,优先调用普通函数点击查看代码```cpp#include<iostream>usingnamespacestd;//普通函数与函数模板调用规则//1.如果函数模板和普通函数都可以调用,优先调用普通函数//2.可以通过空模板参数列表强制调用函数模板//3.函数模板也可以......
  • ISUP协议视频平台EasyCVR私有化部署视频平台P2P远程技术访问的局限性有哪些?
    在当今数字化时代,视频监控系统已成为安全防护的重要组成部分,尤其在大中型项目中,跨区域网络化视频监控的需求日益增长。然而,传统的P2P访问方式在实际应用中存在一定的局限性,这些局限性不仅影响监控系统的稳定性和可靠性,也对用户体验造成直接影响。一、P2P访问的局限性同一个设备......
  • C++函数模板案例
    案例描述:利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序排序规则从大到小,排序算法为选择排序分别利用char数组和int数组进行测试示例:点击查看代码```cpp#include<iostream>usingnamespacestd;//实现通用对数组进行排序的函数//规则从大到小//算......
  • P6329 【模板】点分树 | 震波
    P6329【模板】点分树|震波来补点分树模板的题解了:先明确一下点分树的定义:又很多个重心构成的一棵树,且树上的层数关系对应重心的大小那么我们为什么要建这一颗树呢:因为我们要处理多组询问并且又修改.然后点分树的建树方式其实在定义中就几乎给出了,就是在求重心时将新老重心......
  • P3391 【模板】文艺平衡树
    P3391【模板】文艺平衡树【模板】文艺平衡树题目描述您需要写一种数据结构(可参考题目标题),来维护一个有序数列。其中需要提供以下操作:翻转一个区间。输入格式第一行两个正整数\(n,m\),表示序列长度与操作个数。序列中第\(i\)项初始为\(i\)。接下来\(m\)行,每行两个正整......
  • P6192 【模板】最小斯坦纳树
    题目描述:题目给定一张图上的几个关键点,要求我们用最小的边权将这些点连起来不难发现,最后连出来的答案一定是一棵树:如果有环的话,将环优化掉一定更好我们考虑dp:对于一个节点x钦定它是这颗树的根。记dp[rt][s]表示以rt为根,关键点被链接的状态为s时的最小花费则在最短路中......
  • 组策略 计算机配置-管理模板-Windows组件-传递优化- 设置 注册表
    WindowsRegistryEditorVersion5.00;1.绝对最大缓存大小(以GB为单位)[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization]"MaxCacheSize"="10";例如设置为10GB,按需调整;2.当设备通过VPN连接时启用对等缓存[HKEY_LOCAL_MACHINE\S......
  • [ABC287E] Karuta(字典树模板题 + 思维暴力两种做法)
    [ABC287E]Karuta题面翻译给定NNN个字符串Si......
  • AIGC项目中的【模板进程】方案的设计实践
    1项目介绍1.1项目背景简单一句话:模板进程是流程的子流程;往往用于比较复杂的aigc项目流程中。由于一个模板有多个流程,一个运营人员可以操作多个流程,也可创建多个流程。在模板推荐时,就会导致不知道是哪次流程。1.2项目目标为了区分模板中流程,就需要增加进程的概念(子流程),为了......