我想知道我是否能以某种方式在C++中进行前/后函数调用.我有一个包含很多函数的包装类,在每次包装函数调用之后我应该调用另一个总是相同的函数.
所以我不想把postFunction()调用放到这样的每一个函数中:
class Foo {
f1();
f2();
f3();
.
.
.
fn();
}
void Foo::f1() {
::f1();
postFunction();
}
void Foo::f2() {
::f2();
postFunction();
}
etc.
Run Code Online (Sandbox Code Playgroud)
相反,当我调用一些Foo的成员函数时,我希望自动调用postFunction.可能吗?这将有助于维护..
jal*_*alf 12
可能是RAII的案例!敦敦dunnn!
struct f1 {
f1(Foo& foo) : foo(foo) {} // pre-function, if you need it
void operator()(){} // main function
~f1() {} // post-function
private:
Foo& foo;
}
Run Code Online (Sandbox Code Playgroud)
然后,您必须确保每次要调用该函数时都创建一个新的临时f1对象.重用它显然意味着每次都不会调用前/后函数.
甚至可以像这样包装它:
void call_f1(Foo& foo) {
f1(foo)(); // calls constructor (pre), operator() (the function itself) and destructor (post)
}
Run Code Online (Sandbox Code Playgroud)
您可能会尝试使用其他结构化方法,但总的来说,看看您是否无法让构造函数/析构函数为您完成繁重的工作.
Roman M的方法也是一个好主意.编写一个通用包装器,它以函子或函数指针作为参数.这样,它可以在调用其参数之前和之后调用前/后函数
实现一个将函数指针作为参数的包装器,并在函数调用之前调用pre\post函数.
Foo::caller ( function* fp ) {
preCall ();
fp (...);
postCall ();
}
Run Code Online (Sandbox Code Playgroud)