函数调用前/后实现

2024-03-14

我想知道我是否可以以某种方式在 C++ 中进行前/后函数调用。我有一个包含很多函数的包装类,在每次包装函数调用之后,我应该调用另一个始终相同的函数。

所以我不想对每个函数都调用 postFunction() ,如下所示:

class Foo {
    f1();
    f2();
    f3();
    .
    .
    .
    fn();
}

void Foo::f1() {
    ::f1();
    postFunction();
}

void Foo::f2() {
    ::f2();
    postFunction();
}

etc.

相反,我希望当我调用某个 Foo 的成员函数时,postFunction 调用会自动进行。是否可以?有助于维护..


可能是一个案例RAII http://en.wikipedia.org/wiki/RAII!顿顿顿!

struct f1 {
  f1(Foo& foo) : foo(foo) {} // pre-function, if you need it
  void operator()(){} // main function
  ~f1() {} // post-function

private:
  Foo& foo;
}

然后,您只需确保每次调用该函数时都创建一个新的临时 f1 对象。重用它显然意味着不会每次都调用前/后函数。

甚至可以像这样包装它:

void call_f1(Foo& foo) {
  f1(foo)(); // calls constructor (pre), operator() (the function itself) and destructor (post)
}

您可以尝试使用其他方式来构造它,但总的来说,看看您是否无法让构造函数/析构函数为您完成繁重的工作。

Roman M 的方法可能也是一个好主意。编写一个通用包装器,它采用仿函数或函数指针作为其参数。这样,它可以在调用其参数之前和之后调用 pre/post 函数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数调用前/后实现 的相关文章

随机推荐