template<class T1, class T2>应用在哪里?

模板说明

template < 类型形式参数表 >
类型形式参数的形式:
typename T1 , typename T2 , …… , typename Tn
或 class T1 , class T2 , …… , class Tn
(注:typename 和 class 的效果完全等同)

类模板的全特化和偏特化

#include <stdio.h>
#include <iostream>

template <typename T1, typename T2>
class A {
public:
    A(T1 self_str1, T2 self_str2) {
        printf("类模板: \n");
        std::cout << self_str1 << std::endl;
        std::cout << self_str2 << std::endl;
        printf("\n");
    }

    ~A() {
        std::cout << "~A" << std::endl;
    }
};

//函数模板的偏特化
template <typename T2>
class A<double, T2> {
public:
    A(double t1, T2 t2) {
        printf("类模板偏特化: \n");
        printf("double: %f\n", t1);
        std::cout << "T2: " << t2 << std::endl;
        printf("\n");
    }

    ~A() {
        std::cout << "~A:double" << std::endl;
    }

};

template <>
class A<double, double> {
public:
    A(double t1, double t2) {
        printf("类模板全特化: \n");
        printf("double: %f %f\n", t1, t2);
        printf("\n");
    }

    ~A() {
        std::cout << "~A:double" << std::endl;
    }
};

int main() {
    A<int, int> a(5, 6); //使用类模板
    A<double, const char*> b(5.0, "hello worle"); //使用偏特化
    A<double, double> c(0.4, 0.5); //使用全特化

    return 0;
}

运行结果:
在这里插入图片描述

结语:

时间: 2020-09-29

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页