假设我有一个包装器函数,它绕过一些较小的递归函数。但是,在调用递归函数之前,包装器会创建递归函数使用的对象。我怎么能用c ++做到这一点?我只需要把它变成自己的类吗?编辑 - 我知道如果我可以把它变成一个班级以及如何从那里开始 - 但我的问题是我需要一个班级还是我可以某种方式逃离而不制作一个?
我做了一个通用的例子来澄清我的问题:
void wrapper()
{
Object myObject;
bool recurFun(int x)
{
// do some stuff with myObject
if (some condition){return recurFun(x-1)}
else {return true}
}
}
请忽略任何基本的语法类型错误,这不是一个工作示例,只是一个帮助我的问题传达给你们。谢谢!
答案 0 :(得分:14)
你可以使用lambdas来获取闭包:
void wrapper()
{
Object myObject;
std::function<bool(int)> recurFun;
recurFun = [&](int x) -> bool {
// do some stuff with myObject
if (some condition){return recurFun(x-1)}
else {return true}
}
}
答案 1 :(得分:2)
当函数需要使用某些东西时,你应该首先想到的是使它成为该函数的参数。所以让你的递归函数接受对象作为参数并在递归调用中绕过它。包装函数将自然地设置对象并传递它。