16,548
社区成员




class C {
int val_;
public:
C(int val) : val_(val) {}
void Print() {
std::cout << val_ << std::endl;
}
};
void RunPrint(C &a) {
a.Print();
}
int main() {
C a(10), b(20);
TRACER_TRACE_WITH(C::Print, (tracer::CallStackRecorder)) print;
print.Before().connect([&b] (bool&, C *&self) { // 注册一个会在C::Print调用之前被调用的回调
self = &b; // 将任意对象对C::Print的调用转移到对象b上
});
RunPrint(a); // 输出20
assert(print.GetCallStack(0).IsCalledBy("RunPrint") == true); // 查找调用栈中是否有指定函数名
assert(print.GetCallStack(0).IsCalledBy(main) == true); // 查找调用栈中是否有指定函数指针
}