more effective c++智能指针继承传递(35)

先看示例:++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class MusicProduct;
class Cassette : public MusicProduct;
class CD : public MusicProduct;
void DisplayAndPlay(const SmartPtr<MusicProduct>& pmp, int times)
SmartPtr<Cassette> f(new );
SmartPtr<CD> fd(new );
DisplayAndPlay(f, 10)
DisplayAndPlay(fd, 10);
这样是无法通过的,
解决方法是使用智能隐式转换。为SmartPtr添加转换函数
templatee<class newType>
operator SmartPtr<newType>()
{
return SmartPtr<newType>(pointee);
}
分析:编译器总是会企图找到一种方式使成功。
所以函数赋值时,它就会解析为:
SmartPtr<Cassette>::operator SmartPtr<MusicProduct> () {
return Smart<MusicProduct>(pointee);
}
// //