Dans certains codes C++, j'utilise des entiers pour stocker beaucoup de données changeantes. Pour analyser mon programme, je souhaite consigner certaines modifications dans certaines variables, telles que la fréquence à laquelle une certaine valeur est affectée et la fréquence à laquelle cette affectation est redondante (la nouvelle valeur est la même que l'ancienne valeur.)C++ dérive d'un type natif
Si le type était un Foo de classe, je dériverais simplement un nouveau LoggingFoo et ajouterais mes données de journalisation à la ou les fonction (s) membre (s) qui m'intéressaient, puis j'appellerais la fonction membre parent. Je devrais mettre à jour mon code pour utiliser le nouveau type, mais tant que j'étais compatible à l'origine avec typedefs, c'est un changement d'une ligne.
Mon problème est que la variable que je veux ajouter à la journalisation est un int. Vous ne pouvez pas dériver de types intégrés en C++ (pouvez-vous?)
Ma question est de savoir s'il y a une façon intelligente de dériver des types de base (int, float, double, etc.).
La solution peut consister à définir une nouvelle classe qui efficacement est un int .. il définit toutes les opérations un int peut faire et applique simplement cette opération à un membre de données int privé. Cette stratégie fonctionnera, mais peut-être que d'autres ont déjà fait une telle classe et je peux simplement utiliser une définition de fichier d'en-tête "fakeint.h". Existe-t-il déjà des définitions de type "wrapper de classe natif proxy" quelque part avant de les implémenter moi-même?
Je réalise bien sûr que mon proxy int ne peut pas être utilisé de manière interchangeable avec un int d'autant plus que les définitions de fonctions existantes attendent toutes un int .. mais pour mon application, tout est dans une boucle interne qui fait beaucoup de natives + - *^= opérations, non utilisées comme arguments de fonction ou quoi que ce soit.
vous devriez regarder dans les opérateurs de boost: http://www.boost.org/doc/libs/1_39_0/libs/utility/operators.htm. Il vous permettra de créer une classe qui a tous les opérateurs typiques pour le faire agir comme un type entier natif. –
@Evan .. merci, c'est une bonne ressource en général! Overkill pour ce dont j'ai besoin, mais si j'ai besoin de rouler le mien, cela réduirait considérablement le travail redondant. – SPWorley