Jak wydobyć nazwę zmiennej

0

Hej,
mam pytanie jak zrobić takie coś w C++, żeby z wnętrza metody poznać nazwę instancji obiektu, na rzecz którego wywoływana jest ta metoda.

Krótki przykład o co chodzi

class Test{
void print() {...}
};

Test zmienna;
zmienna.print(); // funkcja print wypisuje wyraz zmienna, ponieważ taka zmienna wywołała tą metodę

0

Możesz pobawić się preprocesorem i makrami, ale prawdopodobnie masz błąd w założeniach - zmień je. Możemy ci podpowiedzieć, jeżeli napiszesz co tak naprawdę chcesz zrobić.

0
class Test {
public:
    Test(const char* instanceName) : name(instanceName) {}
    void print() { std::cout << name; }
private:
    std::string name;
};
#define TEST(varName) Test varName(#varName)

int main() {
    TEST(zmienna);
    zmienna.print();
}

Ale podejście mi się nie podoba. Powinieneś korzystać z konstruktora przyjmującego nazwę, którą nadasz mu jawnie.

Edit Generalnie takie coś jest niemożliwe, bo C++ na etapie kompilacji usuwa wszelkie nazwy symboliczne, a program wykonywalny operuje tylko na adresach pamięci (są jeszcze symbole dla debuggera w trybie debug, ale niedostępne z poziomu samego programu wykonywalnego).

0

Do Rev,
założenie jest takie, żeby nie przechowywać w klasie pola o nazwie takim jak nazwa obiektu, bo, po co skoro i tak się nie różnią. Celem tego wszystkiego było wyeksportowanie danych zapisanych w klasach do plików o nazwach takich jak nazwy obiektów z rozszerzeniem dat. Oczywiście dodatkowe pole jest jakimś wyjściem, ale po co mam teraz w całym programie zamiast wywołania klasa a, b, c, robić klasa a("a"), klasa b("b"), klasa c("c") itd.

rincewind - makro to słaby pomysł, też wydaje mi się, że takie coś jest niemożliwe do zrobienia, ale chciałem zapytać się kogoś, kto ma większe doświadczenie ode mnie

0

@adrianek251 twój błąd polega na tym że wydaje ci się że nazwy są gdzieś obecne, a nie są. Na etapie kompilacji nazwy znikają i zostają same adresy obiektów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1