【发布时间】:2020-04-12 17:50:41
【问题描述】:
我想处理我的函数中的错误。我决定在该函数中使用一个可调用的参数。因此,当“用户”即将调用该“危险”函数时,他可以指定要执行的操作,例如拉姆达表达式。我希望用户可以调用在“用户范围”中无法访问的 lambda 中的某个函数(它可能可以从一些不同的隐藏范围访问,例如与危险函数相同的命名空间,或者嵌套在那里的更好的命名空间)有没有办法做这样的事情?
我可能会尝试将它作为参数传递给 lamda,但这需要用户了解该函数。如果 id 喜欢以这种方式公开多个函数,那就更糟了。
像这样:
#include "dangerous.hpp"
int main() {
std::string error_description
// call a function from dangerous.hpp
dngr::doathing(
"param1", "param2", "param3",
[&error_description](int error_code){
error_description = get_description(error_code);
// ^
// also provided by dangerous.hpp somehow
}
);
return 0;
}
但 get_description() 函数在默认命名空间中无处可见(无需过多查看)definetley 不在默认命名空间中
【问题讨论】:
-
我建议不要要求人们使用他们的想象力。显示一些尝试执行您所说的代码。
-
抱歉,已编辑问题
-
您提供的示例代码让我想知道为什么您传入错误代码而不是错误对象?错误对象可能带有成员方法来获取代码和描述。你能举个例子说明采用简单的面向对象方法是不够的吗?
-
正如你所说的,这只是一个例子,但背后的想法是我只传递代码(没有额外的数据),并且错误的描述将被硬编码,所以除非实际出现错误,否则不会传递发生。如果我通过引用传递它,我可能想多了
标签: c++ function lambda error-handling scope