【发布时间】:2016-11-03 02:01:55
【问题描述】:
我正在将 Python 指标库移植到 C++。 Python 库提供的一个 API 是函数装饰器,用于轻松记录函数的计时数据。通过修改函数定义为
@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++ 没有与此 python 功能等效的功能。
标签: c++