c++小技巧(一)模版类不同具化类之间的转换
来源:互联网 发布:nat123访问数据库很慢 编辑:程序博客网 时间:2024/05/24 02:21
很多时候我们会写出下面这样的代码
template <typename T>class A{public: A(T _a):m_a(_a){} void print() { cout<<m_a<<endl; } T m_a;};int main(){ A<int> aint(20); A<float> afloat(50); afloat=aint; return 0;}
上面的代码看起来很好,但是却编译不过。问题出在afloat=aint这句,你可能会说,我不要这句,不这么写就完了呗。但是实际问题中,一个int赋值给一个float是显而易见正确和有意义的,所以非常有可能我们恰恰就需要这样的代码,而且它在逻辑上也说得通,这就是模版类不同具现类之间转换。
不同类之间要实现转换,很简单写一个这样的类为参数的构造函数就可以了,但是对于模版,我们不可能这样做。我们应该写一个不同模版形参的模版类的构造函数就像这样:
template <typename T>class A{public: explicit A(T _a):m_a(_a){} //就像这样!!!!!! template<typename U> A(A<U>& _a):m_a(_a.m_a){} void print() { cout<<m_a<<endl; } T m_a;};
ok啦!只要U能转换成T 那就可以A< U >转换成A< T >,以最开始的代码为例,当编译器遇到afloat=aint时,发现没有对应的赋值函数,但是有个A< float >=A< float >的赋值函数(编译器自动加的),所以编译器尝试把一个A< int >转变为A< float >,加上上面的代码,编译器发现可以完成这样的转换,就可以编译过了,这就是模版类不同具化间的转换。在编写模版类时,这是一个常用的技巧,stl中大量使用了它。
阅读全文
0 0
- c++小技巧(一)模版类不同具化类之间的转换
- 语言小知识-Java- 不同进制之间的转换
- objective-c中不同数据类型之间的相互转换
- 不同坐标系之间的转换
- 不同字符集之间的编码转换
- 不同数字类型之间的转换
- VHDL不同数据类型之间的转换
- 不同数字类型之间的转换
- c# 不同进制之间的转换
- 1.不同进制数之间的相互转换
- 不同字符编码格式之间的转换
- 不同数据库之间的数据转换
- 物料不同单位之间的转换
- 不同数据类型与Json之间的转换
- Java不同数据类型之间的转换
- hdu1701 ACMer 不同数据类型之间的转换
- 不同进制之间的转换
- Thinkphp不同数据库类型之间的转换
- 2121
- maven 脚本
- 简单的注册登录展示小系统总结
- GitHub上传及删除
- 单点登录
- c++小技巧(一)模版类不同具化类之间的转换
- 7-1 畅通工程之局部最小花费问题
- static关键字总结
- android仿京东商城项目
- 内存管理(1)--动态分区分配策略
- mybatis(4)---优化配置文件中的配置
- 138. Copy List with Random Pointer
- 问面试官
- ArrayList既然继承自AbstractList抽象类,而AbstractList已经实现了List接口,那么ArrayList类为何还要再实现List接口呢?