Я портирую библиотеку метрик Python на C++. Один API, предоставляемый библиотекой Python, представляет собой декоратор функции, который позволяет легко записывать данные синхронизации по функциям. Изменяя определение функции будетЧто такое эквивалент декораторов функций Python в C++?
@timed('timing.foo')
def foo():
...
foo_result = foo()
по существу превратился в
start = time.time()
foo_result = foo()
post_metric_to_endpoint('timing.foo', time.time() - start)
В Function hooking in C++ мы находим this answer, что оборачивает экземпляры и помещает бремя вызова функции синхронизации на вызывающем , что означает, что мы не будем получать данные о производительности через кодовую базу (в первую очередь это раздражает обновление и легко забывается позже). Аналогично, this answer - Timing in an elegant way in c++ требует изменения сайтов вызова. This other answer в этом вопросе предоставляет способ обертывания произвольных блоков кода, что теоретически означает, что мы могли бы отпечатать весь элемент функции, который мы хотим, и вложить его в область видимости. Это самое близкое, что я нашел к тому, что я хочу, но довольно уродливый, довольно навязчивый, и я не уверен в влиянии производительности.
Поскольку это предназначено для использования в качестве библиотеки, мы можем изменить источник функций, которые мы хотим использовать во времени; на самом деле, это предпочтительнее, так как я хотел бы каждый вызов этой функции для синхронизации. В большинстве обсуждений основное внимание уделяется специальному профилированию в разработке, в то время как я пытаюсь создать систему, которая всегда будет работать в производственной среде.
C++ не имеют аналогов этой функцию питона. –