簡體   English   中英

C ++編譯時狀態變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM