问题
On page 57 of The Design and Evolution of C++, Dr. Stroustrup talks about a feature that was initially part of C with Classes, but it isn't part of modern C++(standard C++). The feature is called call/return
. This is an example:
class myclass
{
call() { /* do something before each call to a function. */ }
return() { /* do something else after each call to a function. */ }
...
};
I find this feature very interesting. Does any modern language have this particular feature?
回答1:
The modern C++ equivalent would be a sentry object: construct it at the beginning of a function, with its constructor implementing call()
, and upon return (or abnormal exit), its destructor implements return()
.
回答2:
Aspect Oriented Programming has this. http://en.wikipedia.org/wiki/Aspect-oriented_programming
Aspect Oriented Programming (also known as AOP) has the ability to create interceptors before, after and around code.
回答3:
The D2 programming language has this and more with it's ScopeGuards. It's designed so you can use multiple ones, they work like a FILO stack.
来源:https://stackoverflow.com/questions/2688043/call-return-feature-of-classic-cc-with-classes-what-modern-languages-have-i