我有兴趣能够做这样的事情:
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)
}
以某种方式在编译时将其转换为:
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();
}
有没有办法使用预处理器(似乎不太可能)或模板来维护和增加整数状态?
我知道我可以这样做:
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();
}
但是拥有编译时索引还有一些额外的价值(这里很难解释这些索引,而不会进入某些专有细节)
编辑:这是在嵌入式系统上,并且__COUNTER__
不可用(我只是尝试过:我的编译器或预处理器没有定义__COUNTER__
),我不确定我可以让Boost工作,至少不是完整的。
答案 0 :(得分:4)
__COUNTER__
宏是你的朋友。
答案 1 :(得分:2)
counters.push_back(measure_time())
怎么样?
答案 2 :(得分:1)
获取boost源代码。了解BOOST_PP_COUNTER
的工作原理(期望让人头痛)。然后在代码中复制功能。或者只是使用提升。请注意BOOST_PP_COUNTER
不使用__COUNTER__
。