c++ template
template<typename T, typename M> //基本的模板函数和模板类 void testfunc(T a, M b) { std::cout<<a<<b<<std::endl; } template<typename T, typename N> class testclass { public: testclass(T a, N b){} ~testclass()= default; }; int main() { testfunc(3,4); testclass<int,float> atest(3,1.5); }
//全特化,意思就是模板失去效果,类型全指定 template<typename T, typename M>void testfunc(T a, M b) { std::cout<<a<<b<<std::endl; } template<>void testfunc(int a, float b) { std::cout<<a<<b<<std::endl; } template<typename T, typename N>class testclass { public: testclass(T a, N b){} ~testclass()= default; }; template<> class testclass<int ,float> { public: testclass(int a, float b){std::cout<<a<<b<<"全特化构造"<<std::endl;}; ~testclass() = default;; }; int main() { testfunc(3,1.2); testclass<int,float> a(1,3.5) ; }
//偏特化,以上两种的杂交 template<typename T, typename M>void testfunc(T a, M b) { std::cout<<a<<b<<std::endl; } template<typename T>void testfunc(T a, float b) { std::cout<<a<<b<<std::endl; } template<typename T, typename N>class testclass { public: testclass(T a, N b){} ~testclass()= default; }; template<typename T> class testclass<T ,float> { public: testclass(T a, float b){std::cout<<a<<b<<"全特化构造"<<std::endl;}; ~testclass() = default;; }; int main() { testfunc(3,1.2); testclass<int,float> a(1,3.5) ; }