In Java, when I need a callback function, I have to implement an anonymous class. Inside the anonymous class, I can access the outside variables if they're final
.
Now I'm doing the same thing in C++. I understand that C++ lambda works better but sometimes I need to pass in many functions where with anonymous classes, I only need to pass in one instance.
I tried the following example. It works with GCC 4.3.4.
class IA {
public:
virtual int f(int x) = 0;
};
int main() {
class : public IA {
int f(int x) { return x + 1; }
} a;
doFancyWork(&a);
return 0;
}
Is it possible to capture the outside variables like this?
int main() {
int y = 100; // mark y as final if possible
class : public IA {
int f(int x) { return x + y; }
} a;
return 0;
}
UPDATE:
The second example won't compile. The errors are here,
prog.cpp: In member function ‘virtual int main()::<anonymous class>::f(int)’:
prog.cpp:9: error: use of ‘auto’ variable from containing function
prog.cpp:7: error: ‘int y’ declared here
prog.cpp: In function ‘int main()’:
prog.cpp:7: warning: unused variable ‘y’
UPDATE:
I just realized a few more problems in doing this:
- I cannot write a constructor because the class doesn't have a name
- initializer list doesn't allow inheritance.
- any change to make it compile makes the code unreadable.
I think I have to move away from anonymous classes.
question from:
https://stackoverflow.com/questions/14368619/can-i-create-anonymous-classes-in-c-and-capture-the-outside-variables-like-in 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…