在 C++ 模板中,可以为模板参数提供默认值,这使得模板在某些情况下使用起来更加灵活。
类模板的默认参数
- 语法:
template
class MyClass {
// ...
};
- 在这个例子中,T 的默认类型是 int,U 的默认类型是 double。
- 使用方式:
- 当你创建 MyClass 的实例时,你可以选择不指定模板参数,这时将使用默认值:
MyClass<> obj1; // T = int, U = double
- 你也可以只指定部分模板参数:
MyClass
obj2; // T = char, U = double
- 或者指定所有模板参数:
MyClass
obj3; // T = char, U = float
- 注意事项:
- 类模板可以有默认模板参数,但是函数模板在 C++11 之前不可以有默认模板参数。
- 在模板参数列表中,默认参数必须从右向左设置。也就是说,如果你为一个模板参数设置了默认值,那么它右边的所有模板参数都必须有默认值。
函数模板的默认参数(C++11 及以后)
- 语法:
template
void myFunction(T a, U b) {
// ...
}
- 与类模板类似,你可以为函数模板的类型参数提供默认值。
- 使用方式:
- 编译器可以从函数参数推导出模板参数,因此在许多情况下,你不需要显式指定它们。
- 当函数模板的参数不能被推导出来,或者是你想明确指定的时候,默认模板参数就会很有用。
myFunction(); // T = int, U = double
myFunction(); // T = char, U = double
myFunction(); // T = char, U = float
- 注意事项:
- C++11 引入了函数模板的默认模板参数。
非类型模板参数的默认值
- 语法:
template
class MyArray {
int data[size];
// ...
};
- 你也可以为非类型模板参数(例如整数)提供默认值。
- 使用方式:
MyArray<> arr1; // size = 10
MyArray<20> arr2; // size = 20