生成唯一变量并重用它们

老师

关于使用C预处理器生成唯一变量的问题,我知道该怎么做。我想要下一步:稍后重用名称

我想有,例如,二define名,STARTT并且STOPT,实际上启动一个定时器并停止它,这样我可以在整个项目只是作为使用同样的名字

// Get the cool STARTT/STOPT macros
#include "coolmacros"

myclass::myclass()
{
    STARTT
    // Do something
    STOPT
}

void myclass::compute(double f, std::vector<double> &v)
{
    STARTT
    // Do something
    STOPT
}

现在我只打印发生了如下情况

#define STARTT info(">>> START %s::%s", demangle(typeid(*this).name()).c_str(), __FUNCTION__);
#define STOPT  info(">>> STOP  %s::%s", demangle(typeid(*this).name()).c_str(), __FUNCTION__);

是否可以在宏中添加计时器,以便STOPT知道STARTT生成了什么符号,因此我可以添加以下内容:

#define STOPT  info(">>> STOP  %s::%s %d", demangle(typeid(*this).name()).c_str(), __FUNCTION__, GET_STARTT_TIMER().elapsed());

谢谢!

莫尔布德尼洛

在C ++中,可以使用对象并依赖析构函数:

class TimerThing
{
public:
    TimerThing(const char* name, const char* what, const char* where) 
        : start_time(something()), 
          m_name(name), 
          m_what(what), 
          m_where(where) 
    {
         info(">>> START %s %s::%s", m_name, m_what, m_where);
    }
    ~TimerThing()
    {
        info(">>> STOP %s %s::%s %d", m_name, m_what, m_where, elapsed());
    }
private:
    int elapsed() { /* whatever */ }
    something start_time;
    const char* name;
    const char* m_what;
    const char* m_where;
};

#define SCOPE_TIMER(x) TimerThing x(#x, demangle(typeid(*this).name()).c_str(), __FUNCTION__)

class Foo
{
    public:
    void f()
    {   
        SCOPE_TIMER(f_timer);
        {
            SCOPE_TIMER(f_subtimer);
        }       
    }
};

可能的输出:

>>> START f_timer Foo Foo::f
>>> START f_subtimer Foo Foo::f
>>> STOP f_subtimer Foo Foo::f 10
>>> STOP f_timer Foo Foo::f 12

(警告:具有完全虚构的计时功能的未经测试的代码。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java:如何提供唯一的ID并重用它们?

来自分类Dev

如何在jquery中创建函数并重用它们

来自分类Dev

计算唯一变量的出现

来自分类Dev

声明相同类型的变量并重新使用它们

来自分类Dev

UIStoryboard定义一个collectionViewCell并重用它

来自分类Dev

摘要统计条件中每个唯一变量的变量

来自分类Dev

从data.frame分配唯一变量

来自分类Dev

SQL查询30个唯一变量

来自分类Dev

PHP:在For循环中创建唯一变量

来自分类Dev

从公式中提取所有唯一变量

来自分类Dev

PHP:在For循环中创建唯一变量

来自分类Dev

JS中的非唯一变量名称

来自分类Dev

Angular2唯一变量设置问题

来自分类Dev

AngularJS:在拦截器中声明唯一变量

来自分类Dev

预处理程序宏:以任何方式获取唯一的变量名并重新使用它?

来自分类Dev

附带条件的唯一唯一变量的累积和

来自分类Dev

附带条件的唯一唯一变量的累积和

来自分类Dev

产生多个std :: thread并重用它

来自分类Dev

从具有多个唯一变量的长格式到宽格式转换为R中的其他唯一变量

来自分类Dev

如何解析引导程序变量并在自己的类中重用它们?

来自分类Dev

Ruby Rails-遍历数组并将每个值另存为唯一变量

来自分类Dev

在R中的组内排名,每个组有多少个唯一变量?

来自分类Dev

如果结果存在,如何搜索PHP数组并创建唯一变量?

来自分类Dev

R OMPR软件包-限制所选唯一变量组件的数量

来自分类Dev

Scanf跳过变量并重用旧变量

来自分类Dev

Matlab:如何构造一系列常数?以及如何重用它们?

来自分类Dev

Matlab:如何构造一系列常数?以及如何重用它们?

来自分类Dev

如何生成一个新变量,该变量是同一变量在不同年份的价值之差?

来自分类Dev

如何清理使用堆栈(haskell)创建的目录并重用它?

Related 相关文章

  1. 1

    Java:如何提供唯一的ID并重用它们?

  2. 2

    如何在jquery中创建函数并重用它们

  3. 3

    计算唯一变量的出现

  4. 4

    声明相同类型的变量并重新使用它们

  5. 5

    UIStoryboard定义一个collectionViewCell并重用它

  6. 6

    摘要统计条件中每个唯一变量的变量

  7. 7

    从data.frame分配唯一变量

  8. 8

    SQL查询30个唯一变量

  9. 9

    PHP:在For循环中创建唯一变量

  10. 10

    从公式中提取所有唯一变量

  11. 11

    PHP:在For循环中创建唯一变量

  12. 12

    JS中的非唯一变量名称

  13. 13

    Angular2唯一变量设置问题

  14. 14

    AngularJS:在拦截器中声明唯一变量

  15. 15

    预处理程序宏:以任何方式获取唯一的变量名并重新使用它?

  16. 16

    附带条件的唯一唯一变量的累积和

  17. 17

    附带条件的唯一唯一变量的累积和

  18. 18

    产生多个std :: thread并重用它

  19. 19

    从具有多个唯一变量的长格式到宽格式转换为R中的其他唯一变量

  20. 20

    如何解析引导程序变量并在自己的类中重用它们?

  21. 21

    Ruby Rails-遍历数组并将每个值另存为唯一变量

  22. 22

    在R中的组内排名,每个组有多少个唯一变量?

  23. 23

    如果结果存在,如何搜索PHP数组并创建唯一变量?

  24. 24

    R OMPR软件包-限制所选唯一变量组件的数量

  25. 25

    Scanf跳过变量并重用旧变量

  26. 26

    Matlab:如何构造一系列常数?以及如何重用它们?

  27. 27

    Matlab:如何构造一系列常数?以及如何重用它们?

  28. 28

    如何生成一个新变量,该变量是同一变量在不同年份的价值之差?

  29. 29

    如何清理使用堆栈(haskell)创建的目录并重用它?

热门标签

归档