※ 引述《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