【发布时间】:2020-07-06 06:42:56
【问题描述】:
我有一个用于计时代码块的计时器类。基本上是这样的:
timer.start();
////do something
timer.end();
我正在寻找一种 编译时 方法来确保 start 和 end 调用都存在,并且在范围内。甚至是骇人听闻的方法。
这是我的意思的一个例子......如果调用“end()”而不是“start()”,这将产生编译时错误,因为隐藏变量“foo”的方式是初始化。
#define start_macro bool foo = false; timer.start();
#define end_macro foo = true; timer.end();
//start_macro
////do something
end_macro //generates error because start_macro not called, thus foo not declared
但显然该方法的应用是有限的,因为如果 end() 是未调用的函数,它不会产生错误。
是否有任何聪明的方法可以确保在编译时按顺序和范围调用这两个函数?我对任何运行时检查方法都不感兴趣...我想要一种更快的方法来捕获丢失的调用。
【问题讨论】:
-
使用 RAII - 一个在构建时启动计时器并在销毁时结束的对象。然后在与您正在计时的任何内容相同的块中包含该类型的对象。与
lock_guard等标准类的想法相同。
标签: c++ function compilation