最近,我一直在编写类似于以下代码:

messagehandler.h:

#include "message.h"
class MessageHandler {
public:
   virtual ~MessageHandler() {}
   virtual void HandleMessage(Message *msg) = 0:
};

persistmessagehandler.h:
MessageHandler *CreatePersistMessageHandler();

persistmessagehandler.cpp:
#include "messagehandler.h"
#include "persist.h"

class PersistMessageHandler : public MessageHandler {
private:
   PersistHandle ph;
   size_t count;
   InternalCheck();
public:
   PersistMessageHandler(int someParam);
   virtual ~PersistMessageHandler ();
   virtual void HandleMessage(Message *msg):
};
PersistMessageHandler::PersistMessageHandler(int someParam)
{
  ph.Initialize();
}
... rest of implementation.

MessageHandler *CreatePersistMessageHandler(int someParam)
{
  return new PersistMessageHandler(someParam);
}

这里的理由是隐藏PersistMessageHandler。客户端不需要为PersistMessageHandler类包含 header ,而该 header 可以包含实现可能需要的所有包含和类型,而不必更清楚地分离接口(interface)和实现。
。无论如何,它总是会动态分配,

所有PersistMessageHandler用户将只调用CreatePersistMessageHandler(..);直接或间接从工厂获得。

但。我没有看到这种方法在其他地方使用太多。以上是好的做法吗?对于简单的案例,还有其他/更好的选择吗?

最佳答案

您总是必须尽可能地隐藏。您的方式(将实现类放入.cpp)是在c++中执行此操作的常用方式。

08-07 03:43