C++重载类型转换操作符(type cast operator)5 H% W2 R5 G4 Z0 \+ u
boost::ref和boost::cref使用了重载“类型转换(type cast)”操作符来实现使用引用类型来替换模版参数,本文就介绍一下这种操作符的重载方法。
- f% i6 r8 q8 C" l; j( H$ o5 a 函数原型
! V1 |5 d) i: I4 Z$ z& m T1::operator T2() [const]; //T1的成员函数,重载"(T2)a"操作符: m: O- N7 m) \$ d5 S
1. 类型转换重载函数的返回值是隐含的,并且不能显示声明,返回值是与转换的类型相同的,即为上面原型中的T2。- t+ o4 L3 |( @/ Q! k- b" Q( X
2. 不能有参数;6 G: y( m' P* Q: ]
3. 支持继承,可以为虚函数;
+ v. v6 p5 M% @7 X 4. 支持使用typedef定义的类型;
7 M8 b6 l6 V6 f, T7 I& } 先通过一个简单的例子来说明如何使用类型转换重载' a E! | ~9 z R) h
1 #include
6 k4 C) Q* O, }9 \7 d 2
' H; u ^) X; s( j0 \. P% N 3 class D { S' @9 K- l, L( `' H( }
4 public:3 P; J# D" |6 B5 G4 ^$ R
5 D(double d) : d_(d) {}( o; c+ {0 T& o# f
6
; t* O# h1 I! {0 B5 R 7 /* 重载“(int)D” */
* {3 g! s) D3 ]7 k9 z/ X 8 operator int() const {
, J2 {! K, Z$ P$ @* j 9 std::cout |