微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将 C++ 类方法包装在具有附加功能的 try catch 块中

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

我有一个Child,它继承自 Parent添加了一些功能。我希望类 Parent 实现一个函数(可能是 trycatch),该函数会将类 Child 中的函数包装在带有一些前缀和后缀的 try catch 中,以便 {{1} } 可以使用此 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
        }
};

这给我留下了以下问题:

  1. 如何将此类方法作为参数实现。我试过这个 class Child : public Parent{ public: void foo(){ trycatch(bar); } void bar(){ // do error prone stuff } }; void (*f)(),但编译器没有。
  2. 这是用 C++ 做事的糟糕方式吗?还有其他(更好的)方式吗?
  3. 这是对多态的错误使用吗?

解决方法

我对你的设计没有意见。

这里是如何使它工作。

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

在呼叫站点:

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

完成。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。