c++笔记——类模板
类模板的几个简单测试例程
几个要点:
(1)类模板类型,在实例化时需要显式类型名称
(2)已经显式类型后,传入的参数如果不是相应类型,则会发生强制转换
(3)在类外定义的成员函数,需要加上模板参数列表和类作用域,且类作用域带类型列表
(4)多个参数模板时,可以在函数中使用其中若干个,不用全部都使用。
(5)用using来重命名一个模板
// // Created by ht on 2023/4/17. // #ifndef TEST_THREAD_TEST_CLASS_H #define TEST_THREAD_TEST_CLASS_H #include <iostream> #include <vector> #include<typeinfo> #include<cxxabi.h> using namespace std; template <typename T> class A{ public: A() = default; ~A() = default; void fun(T a); }; template<typename T> void A<T>::fun(T a) { cout << "a = " << a << endl; } template<typename M, typename N> class B{ public: B(){ cout << "this is B constor" << endl; } ~B() = default; M a; N b; void fun2(M m, N n, int c){ cout << "this is fun2 " << endl; } void fun3(int k, N t); }; //这里还需要在fun3前面加上类型模板和类型作用域,也支持只传一个类模板参数,且会执行隐式类型转换 template<typename M, typename N> void B<M, N>::fun3(int k, N t) { cout << "this is fun3 " << endl; cout << "N t = " << t << endl; cout << "N type : "<< abi::__cxa_demangle(typeid(t).name(),0,0,0 ) << endl; } //由于类模板不是一个类型,不能定义一个typedef引用一个模板 template <typename T> using twin = pair<T, T>; #endif //TEST_THREAD_TEST_CLASS_H
主函数
#include "test_class.h" int main(){ //class template //A a;//错误 A<int> a; //需要显式模板类型 a.fun(3); //测试多个类型模板参数 B<int, double> b; b.a = 1; b.b = 2.1; //这里b定义的第二参数是double,但是当传入整形2时,会发生类型转换成double b.fun3(2, 2); //测试using twin<string> author("huang", "ting"); return 0; }
作者:水水滴答
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通