當(dāng)前位置:
首頁(yè) >
c++模板--2(模板机制,模板的局限性,类模板,类模板做函数的参数)
發(fā)布時(shí)間:2023/11/30
51
豆豆
生活随笔
收集整理的這篇文章主要介紹了
c++模板--2(模板机制,模板的局限性,类模板,类模板做函数的参数)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
函數(shù)模板機(jī)制結(jié)論
模板的局限性
模板不能解決所有類(lèi)型
如果出現(xiàn)不能解決的類(lèi)型,可以通過(guò)第三具體化來(lái)解決問(wèn)題
template<>返回值 函數(shù)名 <具體類(lèi)型>(參數(shù))
#include<iostream>using namespace std;class Person{public:Person(string name, int age){this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;};template<class T>bool myCompare(T &a, T&b){if (a == b){return true;}return false;}//通過(guò)具體化自定義數(shù)據(jù)類(lèi)型,解決上述問(wèn)題//如果具體化能夠優(yōu)先匹配,那么就選擇具體化//語(yǔ)法 template<>返回值 函數(shù)名<具體類(lèi)型>(參數(shù))template<> bool myCompare<Person>(Person &a, Person&b){if (a.m_Age == b.m_Age){return true;}return false;}void test01(){int a = 10;int b = 20;int ret = myCompare(a, b);cout << "ret=" << ret << endl;Person p1("Tom", 10);Person p2("Jerry", 10);int ret2 = myCompare(p1, p2);cout << "ret2=" << ret2 << endl;}int main(){test01();system("pause");return 0;}類(lèi)模板
與函數(shù)模板區(qū)別,可以有默認(rèn)類(lèi)型參數(shù)
函數(shù)模板可以進(jìn)行自動(dòng)類(lèi)型推導(dǎo),而類(lèi)模板不行
成員函數(shù) 一開(kāi)始不會(huì)創(chuàng)建出來(lái),而是在運(yùn)行時(shí)才去創(chuàng)建
#include<iostream>#include<string>using namespace std;template<class NameType,class AgeType=int>//類(lèi)模板可以有默認(rèn)的參數(shù)class Person{public:Person(NameType name, AgeType age){this->m_Name = name;this->m_Age = age;}void showPerson(){cout << "姓名:" << this->m_Name << "年齡:" << this->m_Age << endl;}NameType m_Name;AgeType m_Age;};void test01(){//自動(dòng)類(lèi)型推導(dǎo),類(lèi)模板 不支持//Person p("孫悟空", 100);//顯示指定類(lèi)型Person<string, int>p("孫悟空", 100);p.showPerson();}class Person1{public:void showPerson1(){cout << "Person1的調(diào)用" << endl;}};class Person2{public:void showPerson2(){cout << "Person2的調(diào)用" << endl;}};template<class T>class myClass{public:T obj;void func1(){obj.showPerson1();}void func2(){obj.showPerson2();}};//成員函數(shù) 一開(kāi)始不會(huì)創(chuàng)建出來(lái),而是在運(yùn)行時(shí)才去創(chuàng)建void test02(){myClass<Person1>m;m.func1();m.func2();}int main(){//test01();test02();system("pause");return 0;}類(lèi)模板做函數(shù)的參數(shù)
顯示的指定類(lèi)型
參數(shù)模板化
整體模板化
查看類(lèi)型名稱(chēng)cout << typeid(T1).name() << endl;
#include<iostream>#include<string>using namespace std;template<class NameType, class AgeType = int>//類(lèi)模板可以有默認(rèn)的參數(shù)class Person{public:Person(NameType name, AgeType age){this->m_Name = name;this->m_Age = age;}void showPerson(){cout << "姓名:" << this->m_Name << "年齡:" << this->m_Age << endl;}NameType m_Name;AgeType m_Age;};//1. 指定傳入類(lèi)型void doWork(Person<string, int>&p){p.showPerson();}void test01(){Person<string, int >p("MT", 10);doWork(p);}//2.參數(shù)模板化template<class T1,class T2>void doWork2(Person<T1, T2>&p){//如何查看類(lèi)型cout << typeid(T1).name() << endl;cout << typeid(T2).name ()<< endl;p.showPerson();}void test02(){Person<string, int>p("呆賊", 18);doWork2(p);}//3 整體模板化template<class T>void doWork3(T &p){cout << typeid(T).name() << endl;p.showPerson();}void test03(){Person<string, int>p("掠人", 18);doWork3(p);}int main(){//test01();test02();test03();system("pause");return 0;}總結(jié)
以上是生活随笔為你收集整理的c++模板--2(模板机制,模板的局限性,类模板,类模板做函数的参数)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DNF刷图力法自动出球加满不,好吧我是球
- 下一篇: c++模板---3(类模板碰到继承问题,