最近我一直在寫類似的代碼這隱藏實現:抽象類 - 在C++實踐
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類包含一個頭文件,包含實現可能需要的所有包含和類型,並且更乾淨地分離接口和實現。 。它會永遠被動態分配無論如何,
所有PersistMessageHandler用戶將只需要調用CreatePersistMessageHandler(..);直接或間接從工廠獲得一個。
但是。我還沒有看到這種方法在別處很多。上述的良好做法?對於簡單情況,還有其他/更好的選擇嗎?
爲什麼有人會將「消息」縮寫爲「消息」?這是一個錯字嗎? – unwind 2010-01-26 09:24:30
偉大的問題!我一直這樣做,一直想知道它是否是猶太教。除我的聲明是:'的std :: auto_ptr的<的MessageHandler> CreatePersistMessageHandler();' – 2010-01-26 09:25:26
參見http://stackoverflow.com/questions/825018/pimpl-idiom-vs-pure-virtual-class-interface – Frank 2010-02-03 15:17:58