C++模板是一种支持泛型编程的机制,允许开发者定义使用任意类型作为参数的函数和类。模板提供了代码复用和类型安全的抽象,使得同一段代码可以用于不同的数据类型。
函数模板
定义和使用
函数模板是一种可以接受任意类型参数的函数。它通过在函数声明中使用模板参数(用尖括号<>
包围)来定义。
template <typename T>
void print(T value) {
std::cout << value << std::endl;
}
使用函数模板时,编译器在编译期间根据传入的参数类型自动实例化模板。
print(10); // int类型实例化
print(3.14); // double类型实例化
print("Hello");// char* 类型实例化
模板参数的默认值
在C++17中,你可以为模板参数指定默认值。如果调用者没有指定模板参数,编译器将使用默认值。
template <typename T = int>
void print(T value) {
std::cout << value << std::endl;
}
这样,即使不指定模板参数类型,print
函数默认使用int
类型。
类模板
定义和使用
类模板是一种可以接受任意类型作为参数的类。它通过在类声明中使用模板参数来定义。
template <typename T, typename U = int>
class Pair {
public:
T first;
U second;
Pair(T f, U s) : first(f), second(s) {}
};
使用类模板时,编译器在编译期间根据传入的参数类型自动实例化模板。
Pair<int, double> intDoublePair(1, 2.0); // int类型first,double类型second
Pair<float> floatPair(3.0f); // float类型first,默认int类型second
模板特化
模板特化是为特定的模板参数提供特定实现的过程。它允许开发者为通用模板提供一个或多个特定的实现。
- 全特化:为特定的模板参数提供完整的类定义。
template <>
class Pair<int, int> {
public:
int first, second;
Pair(int f, int s) : first(f), second(s) {}
};
这个特化定义了一个Pair<int, int>
的特定实现。
- 偏特化:为部分模板参数提供特定的类定义,其他参数保持模板形式。
template <typename T>
class Pair<T, int> {
public:
T first;
int second;
Pair(T f, int s) : first(f), second(s) {}
};
这个偏特化为所有second
类型为int
的Pair
提供了特定的实现。
模板特化提供了灵活性,允许开发者为特定的类型或类型组合提供优化或特定的实现。使用模板特化时,需要小心处理模板的匹配和选择,以避免歧义。
标签:int,C++,类型,second,参数,Pair,模板 From: https://blog.csdn.net/weixin_42300449/article/details/143560175