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 工作,至少不能完全工作。