类模板的几个简单测试例程
几个要点:
(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; }
标签:笔记,类型,c++,TEST,using,include,class,模板 From: https://www.cnblogs.com/havain/p/17325090.html