我有一个类,我们称之为Product,我想完全隐藏用户的实现。尽管如此,我希望用户收集产品,一般地传递它们,以决定如何处理它们,而不知道里面是什么。
我想到的第一个想法是简单地创建一个ProductFactory类并在ProductFactory.h标头中转发声明Product类。
Product类的对象将由makeProduct方法创建,该方法将返回指向Product类的共享指针。然后用户将无法看到内部的内容,但它可以将其发送到Service类,在其实现中将包括Product的完整定义,以便它可以访问其内容。
你认为这是一个好主意还是感觉像是一种解决方法?
我还在考虑使用pimpl习语,以防我需要一些用户可以访问的顶级功能,例如operator ==所以用户可以检查产品是否相同。
请注意,抽象基类不是一个选项,因为实际上没有一个接口可以兼顾用户,并且足够用于Service类。
答案 0 :(得分:2)
如果shared_ptr给你的操作对用户来说已经足够了(例如应该有一个运算符==),那么这个解决方案应该是一种方法。
如果你需要更多,那么pimpl听起来是个好方法,因为你可以在你的类中定义用户需要的操作,并定义你的服务类在impl中需要的操作。你仍然可以在这里使用智能指针,让生活更轻松。