c++ - 前/后函数调用实现

标签 c++ function

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

所以我不想像这样对每个函数调用 postFunction():

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

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

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

etc.

相反,我希望当我调用某些 Foo 的成员函数时自动调用 postFunction。可能吗?这将有助于维护..

最佳答案

可能是 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 的方法也可能是个好主意。编写一个通用包装器,它以仿函数或函数指针作为参数。这样,它可以在调用其参数之前和之后调用前置/后置函数

关于c++ - 前/后函数调用实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1051539/

相关文章:

c++ - 以整数数组为参数并返回数组中奇数之和的函数

c++ - 使用 c++ 在 vi​​sual studio 中创建 Windows 窗体应用程序时线程化的最佳方式是什么?

c++ - int main() 和 int main(void) 有什么区别?

javascript - 稍后更改 javascript obj 的属性

javascript - 为什么javaScript中的这个循环函数不是每次都返回0?我将如何在 python 中做类似的事情?

javascript - 常用函数的 jquery 原型(prototype)

c++ - 一次加载Lua脚本,多线程多状态执行

c++ - 如何将 pair<int, int> 插入队列?

python - 使用 Python 和函数进行设计

c# - 如何使用 Azure Functions 解析表单数据