C++之template的简单介绍

C++之template的简单介绍

C++模板的详细用法:

1)函数模板:
函数模板允许你定义一个通用的函数,可以接受不同类型的参数。语法如下:

template <typename T>  
T add(T a, T b) {  
    return a + b;  
}

在这个例子中,T是一个占位符类型,可以用任何类型来调用add函数。例如:

int result1 = add<int>(3, 4);     // 结果为7  
double result2 = add<double>(3.5, 4.5);  // 结果为8.0

2)类模板:
类模板允许你定义一个通用的类,可以使用不同类型的对象。语法如下:

template <typename T>  
class MyArray {  
private:  
    T* arr;  
    int size;  
public:  
    MyArray(T* arr, int size) : arr(arr), size(size) {}  
    T get(int index) {  
        return arr[index];  
    }  
};

在这个例子中,T是一个占位符类型,可以用任何类型来创建MyArray类的实例。例如:

int arr1[] = {1, 2, 3};  
MyArray<int> myArray1(arr1, 3);  // 创建一个整型数组对象  
double arr2[] = {1.5, 2.5, 3.5};  
MyArray<double> myArray2(arr2, 3);  // 创建一个双精度浮点型数组对象

3)模板的特化:
模板的特化是一种为特定类型提供模板的特殊实现的方式。语法如下:

template <typename T>  
class MyArray {  
    // ...类定义...  
};  
  
// 特化MyArray类,指定T为int类型时的特殊实现  
template <>  
class MyArray<int> {  
    // ...特化后的类定义...  
};

在这个例子中,当T为int类型时,使用特化后的MyArray类定义。对于其他类型,使用通用的MyArray类定义。

4)模板的参数匹配:
C++17引入了模板的参数匹配功能,允许根据参数类型选择不同的模板实现。语法如下:

template <typename T, typename U>  
void print(T t, U u) {  
    std::cout << "General template" << std::endl;  
}  
  
template <typename T>  
void print(T t, int i) {  
    std::cout << "Specialization for int" << std::endl;  
}

5)模板别名:使用 using 关键字为模板创建别名。
例如:

template <typename T>  
using Vec = std::vector<T>;

6)模板参数默认值:在C++20中,可以为模板参数提供默认值。
例如:

template <typename T = int>  
T add(T a, T b) {  
    return a + b;  
}

7)概念(C++20引入):概念是一种用于模板元编程的新工具,它允许你定义模板参数的约束。
例如:

template <typename T>  
concept Sortable = requires(T t) {   
    { t.sort() } -> void;   
};

8)模块(C++20引入):模块是一种封装和组织代码的新方式,它可以与模板一起使用。
例如:
在 my_module.hpp 文件中定义模块:

export module my_module;  
export template <typename T> void print(T t) { std::cout << t << std::endl; }

在另一个文件中使用模块:

``import my_module; // 导入模块my_module中的所有内容。可以使用print函数了。`

你可能感兴趣的:(c++,开发语言)