如何解决将 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
}
};
这给我留下了以下问题:
- 如何将此类方法作为参数实现。我试过这个
class Child : public Parent{ public: void foo(){ trycatch(bar); } void bar(){ // do error prone stuff } };
和void (*f)()
,但编译器没有。 - 这是用 C++ 做事的糟糕方式吗?还有其他(更好的)方式吗?
- 这是对多态的错误使用吗?
解决方法
我对你的设计没有意见。
这里是如何使它工作。
void trycatch(std::function<void()> f){
// setup
try{
f();
} catch( blah ) {
// cleanup
}
// finish
}
在呼叫站点:
trycatch([&]{ someMethod(); });
完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。