基本上,我想知道下面的内容是否可行?如果这是不可能的,有没有办法伪造它?
#include <iostream>
using namespace std;
template<typename Functor>
void foo(Functor func)
{
auto test = [](Functor f){ int i = 5; f(); };
test(func);
}
int main()
{
foo([](){ cout << i << endl;});
}
答案 0 :(得分:1)
你可以让i
成为函数的参数。
#include <iostream>
using namespace std;
template<typename Functor>
void foo(Functor func)
{
auto test = [](Functor f){ f(5); };
test(func);
}
int main()
{
foo([](int i){ cout << i << endl;});
}
否则,我认为您必须在可从两个地方访问的范围内声明i
,例如作为全局变量:
#include <iostream>
using namespace std;
static int i; // <--- :(
template<typename Functor>
void foo(Functor func)
{
auto test = [](Functor f){ i = 5; f(); };
test(func);
}
int main()
{
foo([](){ cout << i << endl;});
}
答案 1 :(得分:0)
听起来像你正在寻找的是dynamic scoping。它绝对不是C ++或许多其他语言直接支持的(我能想到的唯一支持它的语言是Perl和Emacs Lisp);有充分的理由你应该冥想。
我在C ++中看到过一个动态范围的实现,在这里:
http://uint32t.blogspot.com/2008/03/lame-implementation-of-dynamic-scoping.html
您可以适应您的使用。