• C++模版元编程(持续更新)


    模版类实现

    模板类是C++中的一种特性,它允许程序员编写可以处理多种数据类型的代码。模板类定义了一个通用的类,其中一些或全部的数据成员和成员函数可以是类型参数化的。这意味着你可以创建一个类,其中一些或全部的数据成员和成员函数可以处理任何类型的数据。这使得代码更加通用和可重用。
    下面是一个简单的模板类的例子:

    template <typename T>
    class Array {
    private:
        T* arr;
        int size;
    public:
        Array(T arr[], int s);
        void print();
    };
    template <typename T>
    Array<T>::Array(T arr[], int s) {
        size = s;
        this->arr = new T[s];
        for(int i = 0; i < size; i++)
            this->arr[i] = arr[i];
    }
    template <typename T>
    void Array<T>::print() {
        for (int i = 0; i < size; i++)
            std::cout<<" "<<*(arr + i);
        std::cout<<std::endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这个例子中,Array是一个模板类,它接受一个类型参数T。这个类有一个私有成员变量arr,它是一个类型为T的指针,还有一个整型变量size。它还有一个公有成员函数print,用于打印数组的内容。
    你可以使用这个模板类来创建任何类型的数组,例如:

    int main() { 
        int arr[5] = {1, 2, 3, 4, 5};
        Array<int> a(arr, 5);
        a.print();
        return 0; 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这个例子中,我们创建了一个Array的实例,并传递了一个整型数组和数组的大小。然后我们调用print函数来打印数组的内容。由于Array是一个模板类,我们可以用它来处理任何类型的数组。

    .template cast()

    在C++中,.template cast()是一种模板函数的使用方法,用于将对象转换为指定的类型(在这里是int类型)。

    这个函数是std::static_cast的一种简化形式,它可以在编译时进行类型转换,并且会进行类型安全检查。如果转换不安全,编译器会报错。
    以下是一个示例:

    #include 
    
    int main() {
        double d = 3.14;
        int i = d.template cast<int>();  // 将 double 转换为 int
        std::cout << "d.cast() = " << i << std::endl;  // 输出: d.cast() = 3
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在上面的示例中,我们将一个double类型的变量d转换为int类型,使用了.template cast()函数进行转换。由于double类型的变量d的值为3.14,转换为int类型后,结果为3

    需要注意的是,.template cast()函数仅适用于支持模板的类型,并且在编译时就可以确定转换的安全性。如果要在运行时进行类型转换,可以使用其他类型转换函数,如std::dynamic_caststd::reinterpret_cast

  • 相关阅读:
    【React学习】—React简介(一)
    OSI模型与数据的封装
    TS第二讲 ----- 接口
    HttpURLConnection 接收长字符串时出现中文乱码出现问号��
    作为一名软件测试工程师,需要具备哪些能力?
    HTTP/1.1和HTTP/2的区别
    机器人入门(二)
    最受欢迎的程序员副业排行榜TOP6
    HC-05 蓝牙 2.0 串口模块
    论文一般的写作格式
  • 原文地址:https://blog.csdn.net/gyqJulius_Caesar/article/details/133132698