Поддерживает ли C ++ счетчики времени компиляции?

В целях самоанализа иногда я хотел автоматически назначать серийные номера типам или чему-то подобному.

К сожалению, метапрограммирование шаблонов - это, по сути, функциональный язык, и поэтому отсутствуют глобальные переменные или изменяемое состояние, которое могло бы реализовать такой счетчик.

Или это так?


Пример кода по запросу:

#include <iostream>

int const a = counter_read;
counter_inc;
counter_inc;
counter_inc;
counter_inc;
counter_inc;

int const b = counter_read;

int main() {
    std::cout << a << ' ' << b << '\n'; // print "0 5"

    counter_inc_t();
    counter_inc_t();
    counter_inc_t();

    std::cout << counter_read << '\n'; // print "8"

    struct {
        counter_inc_t d1;
        char x[ counter_read ];
        counter_inc_t d2;
        char y[ counter_read ];
    } ls;

    std::cout << sizeof ls.x << ' ' << sizeof ls.y << '\n'; // print "9 10"
}
60
задан Potatoswatter 29 May 2011 в 07:47
поделиться