通过前向声明隐藏实现

Hiding implementation by forward declaration

本文关键字:隐藏 实现 声明      更新时间:2023-10-16

我有一个类,我们称之为Product,我想对用户完全隐藏它的实现。尽管如此,我希望用户收集产品,传递它们,通常,决定如何处理它们,而不知道里面有什么。

我想到的第一个想法是简单地创建一个 ProductFactory 类并在 ProductFactory.h 标头中前向声明 Product 类。
Product 类的对象将由 makeProduct 方法创建,该方法将返回指向 Product 类的共享指针。然后,用户将无法看到里面的内容,但是例如,它可以将其发送到Service类,该类在其实现中将包括产品的完整定义,以便它可以访问其内部。
您认为这是一个好主意还是感觉像是一种解决方法?

我也在考虑使用 pimpl 习语,以防我需要一些用户可以访问的顶级功能,例如 operator==,以便用户可以检查产品是否相同。

请注意,抽象基类不是一个选项,因为实际上没有一个接口可以同时满足用户和 Service 类的限制。

如果shared_ptr给你的操作对用户来说已经足够了(例如,应该有一个运算符==),那么这个解决方案应该是一种方式。

如果你需要的不止这些,那么 pimpl 听起来是个好方法,因为你可以在类中定义用户需要的操作,并在 impl 中定义你的服务类需要的操作。您仍然可以在此处使用智能指针来使生活更轻松。