通过前向声明隐藏实现
Hiding implementation by forward declaration
我有一个类,我们称之为Product,我想对用户完全隐藏它的实现。尽管如此,我希望用户收集产品,传递它们,通常,决定如何处理它们,而不知道里面有什么。
我想到的第一个想法是简单地创建一个 ProductFactory 类并在 ProductFactory.h 标头中前向声明 Product 类。
Product 类的对象将由 makeProduct 方法创建,该方法将返回指向 Product 类的共享指针。然后,用户将无法看到里面的内容,但是例如,它可以将其发送到Service类,该类在其实现中将包括产品的完整定义,以便它可以访问其内部。
您认为这是一个好主意还是感觉像是一种解决方法?
我也在考虑使用 pimpl 习语,以防我需要一些用户可以访问的顶级功能,例如 operator==,以便用户可以检查产品是否相同。
请注意,抽象基类不是一个选项,因为实际上没有一个接口可以同时满足用户和 Service 类的限制。
如果shared_ptr给你的操作对用户来说已经足够了(例如,应该有一个运算符==),那么这个解决方案应该是一种方式。
如果你需要的不止这些,那么 pimpl 听起来是个好方法,因为你可以在类中定义用户需要的操作,并在 impl 中定义你的服务类需要的操作。您仍然可以在此处使用智能指针来使生活更轻松。
相关文章:
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- 我可以为 C++ 类提供不完整的标头以隐藏实现详细信息吗?
- 使用TDD时隐藏文件访问实现详细信息
- 隐藏变异模板实现
- 隐藏PIMPL-Objects拥有的成员的实现
- 隐藏C 接口的特定实现
- 在仅标头库中隐藏实现
- 使用指针(PIMPL IDIOM)隐藏实现
- 是否可以隐藏模板类的实现
- 从其接口隐藏类实现
- 使用私有继承来隐藏实现是个好主意吗
- 如何在C++共享库中隐藏业务对象的实现细节并提供接口
- 通过前向声明隐藏实现
- 扩展类以进行调试:公共API、隐藏实现或其他什么
- 通过内部指针隐藏实现详细信息
- 循环包含在c++头文件中隐藏实现细节的技巧
- 通过减少填充头的数量来隐藏实现细节
- 从工厂函数返回 std::unique_ptr<T> 创建纯虚拟接口的完全隐藏实现
- 成员函数的隐藏实现(如静态全局函数)
- 如何隐藏实现助手模板