假設我有一個類:增廣的一類/純C申請一個方面++(C++ 11)
class Widget {
public:
void initialize() {
// hurr-durr
};
int computeAnswer() {
return -42;
};
std::string getQuestion() {
return "The question";
};
};
它執行一些計算,可以爲所欲爲。
現在我想擴充它 - 應用一個方面,比如記錄每個方法調用的方面。
如果我實現了這個手,我想實現這種方式的所有方法:
int LoggingWidget::computeAnswer(){
log << 'Calling method computeAnswer';
int result = Widget::computerAnswer();
log << 'Result = ' << result;
return result;
}
我想解決儘可能通用(我不想手動將所有呼叫轉發),所以可能的用途可包括其中之一(無論是可能的)
Widget* w = new LoggingWidget(); // either a class that inherits from Widget
// and automatically forwards all calls.
Widget* w = new Logging<Widget>(); // or a template that does this.
這樣,當我打電話
int result = w.computeAnswer();
電話將被記錄。也許新的省略號運算符(...
)可以派上用場嗎?
Decorator模式http://stackoverflow.com/questions/2988066/decorator-pattern-in-c – doctorlove