在隐藏实现时,我已经阅读了很多关于“代理类”或“处理类”或“cheshire cat smile”技术的内容,其中您基本上将指向“真实”类的指针作为公共数据成员/ proxy类,然后在“真正的”类中实现所有内容。
但我正在查看一些示例代码,并注意到另一种似乎更容易的技术,因为它不需要您在句柄类中编写“虚拟”方法,然后调用句柄类中的实际方法,根本不需要任何数据成员,整体看起来更加精简。
该技术只是将您的所有公共方法定义为struct
(或所有内容为public
的类)和所有virtual=0
成员函数。因此没有实施。然后,定义一个静态函数,该函数返回指向此struct
的指针,以便客户端可以使用该类。但是在幕后,这个方法实际上返回了struct的子类,然后你可以在这个子类中继续进行更多的操作。
如果这是如此简单,我认为比包含数据成员的公共类更优雅,该数据成员是指向单独类的指针,并且必须实现公共类对数据成员方法的调用,那么为什么不是'这是隐藏实现中讨论最多的技术吗?
答案 0 :(得分:0)
正如this article所述:
大多数人推荐PIMPL方法的原因是它有一些明显的优势:
抽象类方法有自己的一些优点: