核心解决方法:
- 让目标类T,虚继承基类B。(虚继承迫使虚基类的任何层次的子孙都要显式地初始化虚基类。)
- B的构造函数私有,
- T是B的友元类。
实现方法:
1. class T;
class B{
friend class T;
private:
B() {}
B(const B&) {}
};
class T: public virtual B {
public:
T();
T(char*);
};
2. 使用模板:
template <class T>
class B{
friend class T;
private:
B() {}
};
class T: public virtual B<T>
{
}