在具有附加功能的 try catch 块中包装 C++ class 方法

Wrapping a C++ class method in a try catch block with added functionality

主要来自解释型和动态类型化语言,我对如何在 C++ 中解决这个问题有些困惑。

我有一个 class Child 继承自 Parent 并添加了一些功能。我希望 class Parent 实现一个函数(可能是 trycatch),它将 class Child 中的函数包装在带有一些逻辑前缀的 try catch 中,并且后缀,以便 Child 可以使用此 trycatch.

调用自己的函数

这是我的第一种实现方式:

class Parent{
    public:
        void trycatch(*magicly take function as parameter f*){
            // do some logic perhaps saving some state.
            try{
                f(); // error prone function
            } catch (e){
                // restore some state
            }
            // do some stuff finally
        }
};

这样 child class 就可以这样做:

class Child : public Parent{
    public:
        void foo(){
            trycatch(bar);
        }
        void bar(){
            // do error prone stuff
        }
};

这给我留下了以下问题:

  1. 如何将此 class 方法作为参数实现。我试过 void (*f)()void (*Parent::f) 但编译器没有。
  2. 这是用 C++ 做事的糟糕方式吗,还有其他(更好的)方式吗?
  3. 这是对多态性的错误使用吗?

我对你的设计没有意见。

这里是如何让它工作的。

void trycatch(std::function<void()> f){
  // setup
  try{
    f();
  } catch( blah ) {
    // cleanup
  }
  // finish
}

在呼叫站点:

trycatch([&]{ someMethod(); });

完成。