У меня есть ситуация как на C, так и на С++, которую лучше всего решить с помощью подобных Python-декораторов: у меня мало функций, которые я бы оборачивал чем-то другим, чтобы перед тем, как функция входила в некоторые операторы выполняются и когда он оставляет некоторые другие функции.
Например, у меня есть несколько функций в библиотечном файле C, который при вызове должен блокировать семафор и перед возвратом элемента управления вызываемому, должен освободить семафор. без блокировки они имеют следующую структуру:
int f1(int)
{
...
...
}
int f2(char*)
{
....
}
int f3(blabla)
{
....
}
... fn(...)
Я бы хотел определить глобальный семафор, который должен быть заблокирован до того, как каждая из этих функций будет вызвана и выпущена, когда функция будет возвращена. Я бы хотел сделать это с максимальной простотой; что-то близкое к этому:
#lockprotected
int f1(int)
{
... /* nothing changed over here */
}
#endlockprotected
или что-то вроде
int f1(int)
{
... /* nothing changed over here */
}
#lockprotected f1
Я не хочу:
- Измените имена функций, поскольку они являются библиотечными функциями и вызывается из многих мест.
- Явно размещать любое выражение перед обратными вызовами, поскольку большинство функций имеют много ранних возвратов между ними. Или, если на то пошло, измените любые внутренние функции.
Какой будет самый элегантный способ?