看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《Dreamer77 (追夢)》之銘言: : 請問個問題是 : 有個 IModule.h 純粹的介面 : 還有個 ModuleImp.h 繼承 IModule.h : 另外還有個 ModuleImp.cpp, 而建構就是寫在這//createInstance : 現在有個Client 想要使用這個module. : //Client.h : class IModule; : class Client{ : public: : Client(); : IModule *mModule; : }; : //Client.cpp : Client::Client() : { : mModule = ModuleImp::createInstance(); : } : 我的問題是 : 那這樣Client.cpp 不僅要include IModule.h, 還要ModuleImp.h : 這樣好像就失去了IModule 的目的 : 另一種作法是module construction 寫在IModule.cpp : 但這樣的話 Imodule 要看moduleimp, 而moduleimp 也要看imodule變成互看 : 不知道是該怎麼處理 如果用一個factory pattern 進來是可以解決 : 只是感覺很冗 因為繼承Imodule 的就只有moduleimp. : 感謝各位 還是直接回一下吧。 你可以看 Bridge Pattern (Pimpl idiom) 大概是這樣 ====== foo.h // forward declare class FooImpl; class Foo { private FooImpl* impl; public: Foo(); someMethod(); }; ====== foo.cpp #include "fooimpl.h" Foo::Foo() : foo(new FooImpl()) { } Foo::someMethod() { impl->someMethod(); } ======= fooimpl.h class FooImpl { public: FooImpl(); someMethod(); }; ======= fooimpl.cpp FooImpl::FooImpl() { // real constructor } FooImpl::someMethod() { // real impl of method } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 223.19.42.104