C++ 模板扩展(非类型模板参数和模板特化)
作者:野牛程序员:2024-01-03 20:30:04 C++阅读 2720
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
