Переменные состояния времени компиляции C ++ - PullRequest
3 голосов
/ 01 марта 2012

Мне интересно, что я могу сделать что-то вроде этого:

 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();
 }

, но есть некоторое дополнительное значение, чтобы иметьиндекс времени компиляции (который здесь трудно объяснить, не вдаваясь в некоторые проприетарные подробности)


edit: это на встроенной системе, а __COUNTER__ недоступен (я простопопробовал это: __COUNTER__ не определено моим компилятором или препроцессором), и я не уверен, что смогу заставить Boost работать, по крайней мере, не полностью.

Ответы [ 3 ]

4 голосов
/ 01 марта 2012

__COUNTER__ макрос твой друг.

2 голосов
/ 01 марта 2012

Как насчет counters.push_back(measure_time())?

1 голос
/ 01 марта 2012

Получить boost исходный код.Посмотрите, как работает BOOST_PP_COUNTER (ожидайте головную боль).Затем скопируйте функциональность в вашем коде.Или просто используйте повышение.Обратите внимание, что BOOST_PP_COUNTER не не использует __COUNTER__.

...