0

我有一个类,我们称它为 Product,我想对用户完全隐藏它的实现。尽管如此,我希望用户收集产品,将它们四处传递,一般来说,在不知道里面有什么的情况下决定如何处理它们。

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

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

请注意,抽象基类不是一个选项,因为实际上并没有一个接口可以兼具对用户的限制和对服务类的充分限制。

4

1 回答 1

2

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

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

于 2016-02-17T11:43:28.003 回答