我正在尝试交换A的实现。
我们有旧的代码使用界面,如:
class A;
class B
{
A* CreateA();
};
我们希望
class AImpl;
template<typename Impl = AImpl>
class A: public Impl
{
public:
A(const Impl& a) : Impl(a) {}
};
template<typename Impl = BImpl>
class B : public Impl
{
A* CreateA();
};
其中BImpl只有
AImpl* BImpl::CreateA();
我相信我们可以添加:
A* B::CreateA() { return (A*)BImpl::CreateA();}
但是如果有很多不同版本的CreateA并且我很懒呢?有没有办法在AImpl中定义一个可以隐式转换AImpl *到A *的类型转换器?所以像下面这样的代码不会破坏:
A* pA = BImpl::CreateA();