文章目录概述类模版1.概述2.语法函数模版1.概述2.语法综合示例概述在C中模板Template是一种通用的编程工具允许程序员编写泛型代码使得类或函数能够适用于多种不同的数据类型而不需要重复编写相似的代码,C提供了两种主要类型的模板类模板和函数模板。类模版1.概述类模板允许定义通用的类其中的成员变量或成员方法的类型由模板参数指定。这样的类可以处理不同类型的数据而不需要为每个数据类型编写单独的类。2.语法templatetypenameTclassBox{private:T content;public:Box(T val):content(val){}Tget()const{returncontent;}voidset(T val){contentval;}};实例化时需要显式指定类型BoxintintBox(123);成员函数定义在类外时需要再次声明模板参数templatetypenameTvoidBoxT::set(T val){contentval;}函数模版1.概述定义一个通用的函数其中某些参数类型或返回值类型暂不确定由调用时实际传入的参数类型决定2.语法templatetypenameTTadd(T a,T b){returnab;}接调用编译器根据实参自动推导类型intresultadd(3,5);// T 推导为 intdoubleresadd(2.5,3.7);// T 推导为 double指定类型intvaladdint(3,5.2);// 强制使用 int5.2 会转换为 int综合示例#includeiostream#includestring// 函数模板templatetypenameTTmax(T a,T b){return(ab)?a:b;}// 类模板templatetypenameTclassWrapper{T value;public:Wrapper(T v):value(v){};voidprint();};templatetypenameTvoidWrapperT::print(){std::coutValue: valuestd::endl;}intmain(){// 函数模板自动推导std::coutmax(3,8)std::endl;// 8 (int)std::coutmax(3.14,2.71)std::endl;// 3.14 (double)// 类模板Wrapperintw1(42);w1.print();// Value: 42Wrapperstd::stringw2(Hello);w2.print();// Value: Hello}运行效果