[英]C++ compile-time state variables
我有興趣做這樣的事情:
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工作,至少不是整個。
__COUNTER__
宏是你的朋友。
counters.push_back(measure_time())
怎么樣?
獲取提升源代碼。 了解BOOST_PP_COUNTER
工作原理(期望讓人頭痛)。 然后在代碼中復制功能。 或者只是使用提升。 請注意, BOOST_PP_COUNTER
不使用__COUNTER__
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.