C++ 编译时状态变量

Jas*_*n S 3 c++ templates compile-time c-preprocessor

我有兴趣能够做这样的事情:

 void ISR()
 {
    MEASURE_TIME(counters)
    do_something();
    MEASURE_TIME(counters)
    do_something_else();
    MEASURE_TIME(counters)
    do_another_thing();
    MEASURE_TIME(counters)
    do_one_last_thing();
    MEASURE_TIME(counters)
 }
Run Code Online (Sandbox Code Playgroud)

这会在编译时以某种方式转换为:

 void ISR()
 {
    counters[0] = measure_time();
    do_something();
    counters[1] = measure_time();
    do_something_else();
    counters[2] = measure_time();
    do_another_thing();
    counters[3] = measure_time();
    do_one_last_thing();
    counters[4] = measure_time();
 }
Run Code Online (Sandbox Code Playgroud)

有没有办法使用预处理器(似乎不太可能)或模板来维护和增加整数状态?

我知道我可以这样做:

 void ISR()
 {
    int i = 0;
    counters[i++] = measure_time();
    do_something();
    counters[i++] = measure_time();
    do_something_else();
    counters[i++] = measure_time();
    do_another_thing();
    counters[i++] = measure_time();
    do_one_last_thing();
    counters[i++] = measure_time();
 }
Run Code Online (Sandbox Code Playgroud)

但是拥有编译时索引还有一些额外的价值(如果不涉及一些专有细节,这里很难解释)


编辑:这是在嵌入式系统上,并且__COUNTER__不可用(我刚刚尝试过:__COUNTER__不是由我的编译器或预处理器定义的),并且我不确定我是否可以让 Boost 工作,至少不能完全工作。

Nim*_*Nim 5

__COUNTER__宏是你的朋友。