问题描述
myfunc = function(x){
initial_result = rlang::with_handlers(
.expr = x + 1,error = ~ rlang::abort(c("you did it wrong",x = "`x` should be a number",i = "For example: `x = 2`")))
final_result = initial_result + 1
return(final_result)
}
> myfunc(a)
Error: you did it wrong
x `x` should be a number
i For example: `x = 2`
Run `rlang::last_error()` to see where the error occurred.
可以代替5吗?
cout << a[0]->function();
解决方法
您的代码正在通过function()
指针调用Basis*
,因此它将使用Basis
定义的默认值,Sub
无法覆盖那。通过function()
指针调用Sub*
将使用Sub
定义的默认值。
因此,考虑到您所显示的代码,我想到要执行的操作的最简单方法就是使用函数重载,例如:
class Basis
{
public:
virtual int function() { return function(1); }
virtual int function(int i) { return 2; }
};
class Sub : public Basis
{
public:
int function() override { return function(5); }
int function(int i) override { return i; }
};
int main()
{
Basis* a[2];
a[0] = new Basis();
a[1] = new Sub();
cout << a[0]->function(); //gives 2
cout << a[1]->function(); //gives 5
}