C++ 模板扩展(非类型模板参数和模板特化)
作者:野牛程序员:2024-01-03 20:30:04 C++阅读 2756
C++ 模板系统支持非类型模板参数和模板特化,这使得模板能够更加灵活和通用。非类型模板参数允许你在模板中使用非类型的值作为参数,而模板特化则允许你为特定的模板参数提供定制的实现。
非类型模板参数:
非类型模板参数是在模板声明中使用非类型的值,例如整数、指针或引用。这些参数在编译时就被解析,而不是在运行时。下面是一个使用非类型模板参数的简单示例:
template <int N>
class Array {
public:
int elements[N];
void print() {
for (int i = 0; i < N; ++i) {
std::cout << elements[i] << " ";
}
std::cout << std::endl;
}
};
int main() {
Array<5> arr;
arr.print();
return 0;
}在上面的例子中,Array 是一个模板类,它有一个非类型模板参数 N 表示数组的大小。
模板特化:
模板特化允许你为特定的模板参数提供定制的实现。当模板被实例化时,编译器会优先选择匹配的特化版本。下面是一个简单的模板特化示例:
template <typename T>
class MyClass {
public:
void print() {
std::cout << "Generic Template" << std::endl;
}
};
template <>
class MyClass<int> {
public:
void print() {
std::cout << "Specialized Template for int" << std::endl;
}
};
int main() {
MyClass<double> obj1;
obj1.print(); // 输出: Generic Template
MyClass<int> obj2;
obj2.print(); // 输出: Specialized Template for int
return 0;
}在上面的例子中,MyClass 是一个模板类,但对于 int 类型,提供了一个特化的版本,其 print 方法有不同的实现。
通过使用非类型模板参数和模板特化,C++ 模板系统变得更加强大,能够提供更灵活和高度定制的泛型编程支持。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

