博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++primer记录(二) 模板
阅读量:5751 次
发布时间:2019-06-18

本文共 4610 字,大约阅读时间需要 15 分钟。

因为看得源码里有大量的类模板,所以补充下C++中模板的知识模板:函数模板  类模板                                                                                             1、p-536 函数模板的类型参数可由编译器进行推断,也可以由用户显式的指定,类模板的类型参数必须显式的给出;       p-551 非类型模板实参必须时编译时常量表达式,例:     template 
class Screen{ public: Screen(int vhi, int vwid){} }; ====>Screen<24, 80> hp2621; 2、对于类模板,在外部实现成员函数时,需要加上 //非特化 p-548 template < typename Type > class COMPARE { public: COMPARE(const Type&); };template < typename Type >COMPARE
::COMPARE(const Type& value){}//特化模板 p-568 template <> class COMPARE
{ public: COMPARE(void);};COMPARE
::COMPARE(const char* const& value){}//特化成员函数 p-569template <>COMPARE
::COMPARE(const char* const& value){}3、类模板中的友员声明第一种: (1)非模板类 p-552 (2)非模板函数 p-552 template
class Bar{ friend class FooBar; //(1)非模板类 friend void fcn(); //(2)非模板函数};第二种: (1)一般类模板 p-552 (2)一般函数模板 p-552 (3)类模板的特定实例 p-553 (4)函数模板的特定实例 p-553---------------------------------------------------------------------------(1)(2) template
class Bar{ template
friend class Foo1; //(1)一般模板类 template
friend void temp1_fcn1(const T&); //(2)一般函数模板};------------------------------------------------------------------------------------------------------------------------------------------------------(3)(4) template
class Foo2; //类模板声明 template
void temp1_fcn2(const T&);//函数模板声明 template
class Bar{ friend class Foo2
; friend void temp1_fnc2
(char* const &);};4、成员模板 当模板类或非模板拥有自己的类模板或函数模板的成员,这种成员成为成员模板 成员模板不能为需函数(为验证)5、函数模板的特化 template < typename Type > int compare(const Type &v1, const Type &v2) { return v1 < v2; }//特化函数模板//声明 template <> int compare
(const char* const& v1, const char* const& v2);//实现, 如果不小心略掉了"template <>",则成了重载, 意义就变了 template <> int compare
(const char* const& v1, const char* const& v2) { std::cout << "speci " << v1 << " " << v2 << std::endl; // return v1 > v2; return strcmp(v1, v2); }6、类模板的部分特化(此记录未验证) 如果类模板有一个以上的模板形参,若只需特化某些模板形参而非全部 template < typename T1, typename T2> class some_template{};//类模板部分特化template < typename T1 >class some_template
{};some_template
foo; //use template;some_tempalte
bar; //use partial specialization部分特化可以具有与通用模板完全不同的成员集合,类模板的成员的通用定义永远不会用来实例化类模板部分特化的成员
因为看得源码里有大量的类模板,所以补充下C++中模板的知识模板:函数模板  类模板                                                                                             1、p-536 函数模板的类型参数可由编译器进行推断,也可以由用户显式的指定,类模板的类型参数必须显式的给出;       p-551 非类型模板实参必须时编译时常量表达式,例:     template 
class Screen{ public: Screen(int vhi, int vwid){} }; ====>Screen<24, 80> hp2621; 2、对于类模板,在外部实现成员函数时,需要加上 //非特化 p-548 template < typename Type > class COMPARE { public: COMPARE(const Type&); };template < typename Type >COMPARE
::COMPARE(const Type& value){}//特化模板 p-568 template <> class COMPARE
{ public: COMPARE(void);};COMPARE
::COMPARE(const char* const& value){}//特化成员函数 p-569template <>COMPARE
::COMPARE(const char* const& value){}3、类模板中的友员声明第一种: (1)非模板类 p-552 (2)非模板函数 p-552 template
class Bar{ friend class FooBar; //(1)非模板类 friend void fcn(); //(2)非模板函数};第二种: (1)一般类模板 p-552 (2)一般函数模板 p-552 (3)类模板的特定实例 p-553 (4)函数模板的特定实例 p-553---------------------------------------------------------------------------(1)(2) template
class Bar{ template
friend class Foo1; //(1)一般模板类 template
friend void temp1_fcn1(const T&); //(2)一般函数模板};------------------------------------------------------------------------------------------------------------------------------------------------------(3)(4) template
class Foo2; //类模板声明 template
void temp1_fcn2(const T&);//函数模板声明 template
class Bar{ friend class Foo2
; friend void temp1_fnc2
(char* const &);};4、成员模板 当模板类或非模板拥有自己的类模板或函数模板的成员,这种成员成为成员模板 成员模板不能为需函数(为验证)5、函数模板的特化 template < typename Type > int compare(const Type &v1, const Type &v2) { return v1 < v2; }//特化函数模板//声明 template <> int compare
(const char* const& v1, const char* const& v2);//实现, 如果不小心略掉了"template <>",则成了重载, 意义就变了 template <> int compare
(const char* const& v1, const char* const& v2) { std::cout << "speci " << v1 << " " << v2 << std::endl; // return v1 > v2; return strcmp(v1, v2); }6、类模板的部分特化(此记录未验证) 如果类模板有一个以上的模板形参,若只需特化某些模板形参而非全部 template < typename T1, typename T2> class some_template{};//类模板部分特化template < typename T1 >class some_template
{};some_template
foo; //use template;some_tempalte
bar; //use partial specialization部分特化可以具有与通用模板完全不同的成员集合,类模板的成员的通用定义永远不会用来实例化类模板部分特化的成员

 

转载地址:http://trzkx.baihongyu.com/

你可能感兴趣的文章
修改系统时间 ubuntu
查看>>
Centos7同时运行多个Tomcat
查看>>
使用CocoaPods过程中的几个问题
查看>>
我的友情链接
查看>>
mysql数据类型---数值型---int
查看>>
为eclipse安装maven插件
查看>>
公司新年第一次全员大会小记
查看>>
最懒的程序员
查看>>
JAVA8 Stream 浅析
查看>>
inner join on, left join on, right join on要详细点的介绍
查看>>
SAS vs SSD对比测试MySQL tpch性能
查看>>
Spring boot 整合CXF webservice 全部被拦截的问题
查看>>
Pinpoint跨节点统计失败
查看>>
【Canal源码分析】Canal Server的启动和停止过程
查看>>
机房带宽暴涨问题分析及解决方法
查看>>
iOS 绕过相册权限漏洞
查看>>
我的友情链接
查看>>
XP 安装ORACLE
查看>>
八、 vSphere 6.7 U1(八):分布式交换机配置(vMotion迁移网段)
查看>>
[转载] 中华典故故事(孙刚)——19 万岁
查看>>