C++ には関数内関数がないらしい.

struct使えば,似非関数内関数は作れるが,

この似非関数内関数は親関数の変数に触ることができない.

例えば,以下のプログラムはコンパイルエラーになった.

// test.cpp
int main() {
int c = ;
struct Func {
void operator () () {
c ++;
}
} f;
f();
return ;
}

コンパイルすると,以下のようなメッセージが表示される.

% g++ -O2 -o a.out test.cpp
test.cpp: In member function ‘void main()::Func::operator()()’:
test.cpp:5: error: use of ‘auto’ variable from containing function
test.cpp:2: error:   ‘int c’ declared here

#ラムダ式を使えばできるんですかね.

追記

以下のようにBoost.Lambdaを使用すれば可能だそうです.

http://codepad.org/WAU3yRgH