Pimpl<ConcreteImpReader> m_reader;
public:
ImpPartialReader() : m_reader(this), Base(){}
virtual void read(Buffer& buf, size_t size) { m_reader->read(buf, size);}
};
现在,给出一个原始的Pimpl实现:
| template<typename T> struct Pimpl { T* imp; template<typename Host> explicit Pimpl(Host* host) : imp(new T(host)){} T* operator->() const{return imp;} ~Pimpl(){delete imp;} … }; |
在单独的文档中实现:
| class ConcreteImpReader { ConcreteImpReader(IReader * host) : m_host(host){} void read(Buffer& buf, size_t size) { …} … }; |
ConcreteImpReader中能够引用所在的host对象的其他方法,但是自己实现的方法除外。假如我们愿意,也能够把接口的实现分拆到多个具体的实现类当中,只是我们无法获得象多重继承那样强大的组合能力。




