我有一个类,我们称它为 Product,我想对用户完全隐藏它的实现。尽管如此,我希望用户收集产品,将它们四处传递,一般来说,在不知道里面有什么的情况下决定如何处理它们。
我想到的第一个想法是简单地创建一个 ProductFactory 类并在 ProductFactory.h 头文件中前向声明 Product 类。
Product 类的对象将由 makeProduct 方法创建,该方法将返回指向 Product 类的共享指针。然后,用户将无法看到里面有什么,但它可以例如将其发送到 Service 类,该类在其实现中将包括 Product 的完整定义,以便它可以访问其内容。
您认为这是一个好主意还是感觉更像是一种解决方法?
我也在考虑使用 pimpl idiom,以防我需要一些用户可以访问的顶级功能,例如 operator== 以便用户可以检查产品是否相同。
请注意,抽象基类不是一个选项,因为实际上并没有一个接口可以兼具对用户的限制和对服务类的充分限制。