假设我有一堂课:
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();
呼叫将被记录。也许新的省略号运算符 ( ...
) 可以在这里派上用场?