Il est certainement possible pour une instance de connaître son nom à partir de la méthode de classe:
#include <iostream>
class Foo {
public:
void Print() { std::cout << "Instance name = " << this << std::endl; }
};
int main() {
Foo a, b;
a.Print();
b.Print();
return 0;
}
produira la sortie semblable à ceci:
Instance name = 0x7fff502b8b48
Instance name = 0x7fff502b8b40
comme fo En connaissant le nom de la variable, ce n'est certainement pas possible. L'existence de l'objet ne signifie pas l'existence de la variable - cette instance:
new Foo();
existera pour la durée restante du processus, mais ne sera jamais associée à une variable. Le concept de langage des variables n'est pas reflété dans le contenu desdites variables, et toute relation potentielle entre la variable de langage et un objet est exprimée uniquement dans le code généré et non dans les données générées ou les métadonnées. Sauf évidemment l'accès à l'information de débogage qui, comme déjà souligné, ne fait pas partie du langage.
curieux de savoir si ce n'est que pour le débogage/la journalisation? Je l'espère –
Oui, je me demandais simplement s'il était possible d'aider à affiner un problème que j'avais. –
Ce que vous entendez par nom d'instance n'est pas clair. Considérons 'Foo bar [200]'. Quel nom d'instance devrait être pour 'bar [13]'? Ou même prosaïque, laissez 'new Foo()' retourné '0xbadbad' pointeur. Quel est le nom de l'instance de '* (0xbadbad)'? – ivaigult