c++函数模板和类模板

Posted 程序彤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++函数模板和类模板相关的知识,希望对你有一定的参考价值。

函数模板

#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;


以上是关于c++函数模板和类模板的主要内容,如果未能解决你的问题,请参考以下文章

c++函数模板和类模板

C++模板第一篇:函数模板和类模板

C++ 提高教程 模板-函数模板和类模板

C++模板类和类模板

C++ 函数模板

C++模板详解