2010-04-22 3 views
10

На стр. 57 из The Design and Evolution of C++ д-р Струстуст рассказывает об одной из функций, которая первоначально была частью C с классами, но она не является частью современного C++ (стандартный C++). Эта функция называется call/return. Это пример:Функция вызова/возврата классического C++ (C с классами), на каких современных языках это?

class myclass 
{ 
    call() { /* do something before each call to a function. */ } 
    return() { /* do something else after each call to a function. */ } 
    ... 
}; 

Я нахожу эту функцию очень интересной. Имеет ли какой-либо современный язык эту особенность?

+4

Похож на AOP: http://en.wikipedia.org/wiki/Aspect-oriented_programming –

+0

@gf Это интересно, я думаю, что я собираюсь взглянуть на некоторые рамки AOP для C++, потому что я никогда не делал что раньше :) – AraK

+0

Это выглядит очень ориентированным на аспекты. Мне любопытно, почему это было рассмотрено, а затем отброшено. Также ... У меня нет этой книги, поэтому я должен спросить: была ли эта функция предназначена для применения перед * любой * функцией класса или перед * конкретной * функцией? Можно ли было бы определить разные 'call()' s и 'return()' s для разных функций? – FrustratedWithFormsDesigner

ответ

7

Современный эквивалент C++ будет представлять собой объект-сторож: постройте его в начале функции, с его конструктором, реализующим call(), а при возврате (или ненормальном выходе) его деструктор реализует return().

+0

Не являются объектами сторожа только для входных и выходных потоков? –

+0

+1 Спасибо, я даже не знал об этом классе в C++. попробуйте реализовать мой собственный! – AraK

+0

@Romain: вы можете создавать объекты-часы для всего, что хотите. Я часто их использую во время отладки и для обеспечения сохранения инвариантов. Они также часто используются для обеспечения того, чтобы функции были безопасными для исключения. –

2

Аспектно-ориентированное программирование имеет это. http://en.wikipedia.org/wiki/Aspect-oriented_programming

Аспектно-ориентированное программирование (также известное как АОП) имеет возможность создавать перехватчики до, после и вокруг кода.

0

Язык программирования D2 имеет это и более с его ScopeGuards. Он разработан так, что вы можете использовать несколько, они работают как стек FILO.