请先参考此问题:
How to ensure that every method of a class calls some other method first?
通过重载-〉运算符,我们可以在使用-〉的时候调用某个函数,我想知道是否有什么方法可以找出调用的是什么函数?
示例:
struct foo{
void func1(){
}
void func2(){
}
}
struct Bar{
void someFunc(foo* f){
f->func1();
}
}
struct Baz{
void someFunc(foo* f){
f->func2();
}
}
在上面的例子中,Bar和Baz可以调用func1和func2。一种方法是在每个类中实现一些代码,这些代码调用一个日志记录函数,通知它正在调用的方法名称。
另一种方法是重载-〉运算符来调用log()函数
struct LoggingFoo : private Foo {
void log() const { }
// Here comes the trick
Foo const *operator -> () const { log(); return this; }
Foo *operator -> () { log(); return this; }
};
唯一的问题是如何将一些信息传递给log(),以便它知道正在调用的是什么函数?
编辑:
找到了另一种方法:
https://www.codeproject.com/Articles/34237/A-C-Style-of-Intercepting-Functions
1条答案
按热度按时间x8diyxa71#
使用这种技术是不行的,在
log()
被调用的时候,方法调用还没有发生,没有关于哪个方法将被调用的上下文信息。这里发生的是,首先调用操作符
->
,然后发生func2
调用,与此没有什么不同:log()
无法记录尚未发生的事件。