【发布时间】:2020-07-10 19:44:19
【问题描述】:
我想尝试使用 C++ 装饰器,但我有一些问题。
使用这个例子:https://gist.github.com/dlivingstone/3006324#file-decoratormain-cpp
class AbstractNPC {
public:
virtual void render() = 0;
};
class NPC: public AbstractNPC {
public:
NPC() { }
render(){...}
};
class NPCDecorator: public AbstractNPC {
private:
AbstractNPC * npc;
public:
NPCDecorator(AbstractNPC *n) { npc = n; }
void render() { npc->render(); } // delegate render to npc data member
};
class Elite: public NPCDecorator {
public:
Elite(AbstractNPC *n): NPCDecorator(n) { }
void render() {
cout << "Elite "; // render special features
NPCDecorator::render(); // delegate to base class
}
};
int main(){
AbstractNPC *goblin1= new Elite(new Shaman(new NPC("Goblin")));
...
}
我是否必须在 AbstractNPC 中将每个函数设为虚拟并从 NPCDecorator 重定向它以从外部调用它?
class NPC: public AbstractNPC {
public:
NPC();
void render() {...}
void func1() {...}
void func2() {...}
void func3() {...}
void func4() {...}
void func5() {...}
};
int main(){
AbstractNPC *goblin1= new Elite(new Shaman(new NPC("Goblin")));
call func1(); ???
}
【问题讨论】: