如何重新定义从指针A到​​B点的类型转换?

时间:2016-02-25 16:09:48

标签: c++

我正在尝试交换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();

0 个答案:

没有答案