Ne support du C++ compiler-compteurs de temps?

Dans le but d'introspection, j'ai parfois voulu attribuer automatiquement des numéros de série de types, ou quelque chose de similaire.

Malheureusement, le modèle de la métaprogrammation est essentiellement un langage fonctionnel, et en tant que tel manque de variables globales ou modifiables etat qui mettrait en place un tel compteur.

Ou est-il?


Exemple de code à la demande:

#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"
}
  • pouvez-vous donner un court exemple pour faire la démonstration de ce qu'est exactement la question ?
  • il n'est pas possible d'utiliser X<__LINE__> ? qui fournira un numéro unique (peut-être pas de numéro de série) toujours dans le fichier donné.
  • Cela ne fonctionne pas à travers plusieurs en-têtes, et de ne pas renvoyer le même résultat à plusieurs reprises lors de l'unicité n'est pas souhaitée. Le modèle de solution est plus puissant. Voir la réponse.
  • Connexes: C++ construction qui se comporte comme le COMPTEUR macro.