函数模板
#include <iostream>
using namespace std;
class Person {
public:
string name;
int age;
// bool compare();
Person(string name,int age){
this->name = name;
this->age=age;
}
};
/**
* 函数模板
* @tparam T
* @param a
* @param b
* @return
*/
template<class T>
bool compare(T &a, T &b) {
if (a == b) {
cout << "a和b相等" << endl;
}
}
// 这里必须这么写,否则怎样编译均不通过!
template<> bool compare(Person &p1,Person &p2){
if (p1.age==p2.age&&p1.name==p2.name){
return true;
}
return false;
}
void test1(){
Person person1("lwt",20);
Person person2("lwt",20);
// 这里的compare是调用了template<> bool compare(Person &p1,Person &p2){
bool isEqual = compare(person1,person2);
if (isEqual){
cout<<"="<<endl;
return;
}
cout<<"!="<<endl;
}
int main() {
test1();
return 0;
}
类模板
//
// Created by 李威彤 on 2021/11/25.
//
#include <iostream>
#include "person.h"
using namespace std;
template<class T1, class T2>
class Person {
public:
T1 name;
T2 age;
Person(T1 name, T2 age);
void print();
};
template<class T1, class T2>
Person<T1, T2>::Person(T1 name, T2 age) {
this->name = name;
this->age = age;
cout << "Person<T1,T2>::Person(T1 name,T2 age)..." << endl;
}
template<class T1, class T2>
void Person<T1, T2>::print() {
cout << this->name << "-" << this->age << endl;
};
main()
#include <iostream>
#include "person.hpp" // 法一:这里包含的不能是头文件
//法二:将.h和.cpp文件写到一起于.hpp
using namespace std;
void test1() {
Person<string, int> p("lwt", 22);
p.print();
}
int main() {
test1();
return 0;
}