protected
NVI手法还可以进一步扩展为实现策略设计模式的函数指针方法, 使用函数指针来替代虚函数, 这让我们可以动态改变每个对象的某个行为
但是仅用函数指针还是太笨拙了, 使用标准库的模板类std..., 只和重载一样和名称与参数有关, 所以很容易二义
更复杂的情况是下图的"菱形继承":
菱形继承中, 对于不同基类都拥有的同名成员, C++默认会复制多份以供使用, 如果不希望复制就应该使用虚继承,..., 因此我们无法直接在模板类中调用模板化的基类的成员
有三种方法处理这个问题:
在调用基类函数前加上this指针this->foo();, 用指针进行多态调用
用using声明式using Base<Tmp...45 运用成员函数模板接受所有兼容类型
模板之间并没有什么类似继承关系的固有关系, 无法自动在继承类之间进行隐式转换, 智能指针类通过底层的转型来模拟这种关系
方法是编写用于指针间类型转换的构造模板,...称为成员函数模板(member function template)
智能指针类编写了非explicit的构造函数, 在自身底层是T类型的指针时, 接受一个U类型的指针作为构造函数的参数, 然后通过原始指针本身的转换和继承形式将