在具有附加功能的 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
}
};
这给我留下了以下问题:
- 如何将此 class 方法作为参数实现。我试过
void (*f)()
和 void (*Parent::f)
但编译器没有。
- 这是用 C++ 做事的糟糕方式吗,还有其他(更好的)方式吗?
- 这是对多态性的错误使用吗?
我对你的设计没有意见。
这里是如何让它工作的。
void trycatch(std::function<void()> f){
// setup
try{
f();
} catch( blah ) {
// cleanup
}
// finish
}
在呼叫站点:
trycatch([&]{ someMethod(); });
完成。
主要来自解释型和动态类型化语言,我对如何在 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
}
};
这给我留下了以下问题:
- 如何将此 class 方法作为参数实现。我试过
void (*f)()
和void (*Parent::f)
但编译器没有。 - 这是用 C++ 做事的糟糕方式吗,还有其他(更好的)方式吗?
- 这是对多态性的错误使用吗?
我对你的设计没有意见。
这里是如何让它工作的。
void trycatch(std::function<void()> f){
// setup
try{
f();
} catch( blah ) {
// cleanup
}
// finish
}
在呼叫站点:
trycatch([&]{ someMethod(); });
完成。