类模版实例化出的对象,向函数传参的方式。

1.一共三种传入的类型  --直接显示对象的数据类型

2.参数模版化                --将对象中的参数编程模版进行传递

3.整个类模版化             --将这个对象类型 模版化进行传递

#include <iostream>
using namespace std;

//类模版对象做函数参数
template <typename T1,typename T2>
class Person{
    public:
    Person(T1 name, T2 age)
    {
        this->m_Name=name;
        this->m_Age=age;
    }
    void showPerson()
    {
        cout<<"Name: " << m_Name << ", Age: " << m_Age << endl;
    }

        T1 m_Name;
        T2 m_Age;
};

//1.指定传入类型
//使用引用的方式进行传入,这样我们就可以直接拿到这个person的本体
void printPerson(Person<string,int> &p)
{
    p.showPerson();
}


void test01()
{
    Person<string,int> p("孙悟空",100);
    printPerson(p);
    
}

int main() {
    test01();
    return 0;
}

将参数模版化

//将参数模版化
template <typename T1, typename T2>
void printPerson2(Person<T1,T2> &p)
{
    p.showPerson();
    cout<<"T1的类型为: "<<typeid(T1).name()<<endl;
    cout<<"T2的类型为: "<<typeid(T2).name()<<endl;
}
void test02()
{
    Person<string,int> p("猪八戒",99);
    printPerson2(p);
}

int main() {
    //test01();

    test02();
    return 0;
}

因此最终其输出为这个。

将整个类都模版化

template <typename T>
void printPerson3(T &p)
{
    p.showPerson();
    cout<<"T1的类型为: "<<typeid(T).name()<<endl;
    //这里的T是Person<string,int>类型
    cout<<"T2的类型为: "<<typeid(typename T::T2).name()<<endl; //使用typename来获取类模版中的类型
}
//将整个类都模版化
void test03()
{
    Person<string,int> p("唐僧",30);
    p.showPerson();
    cout<<"T1的类型为: "<<typeid(string).name()<<endl;
    cout<<"T2的类型为: "<<typeid(int).name()<<endl;
}

int main() {
    //test01();

    test03();
    return 0;
}

在实际开发中,第一种最实用。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐