• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] Czy jest jakiś sposób na wypisanie wszystkich zmiennych danej struktury/klasy nie znając ich nazw?

VPS Starter Arubacloud
0 głosów
268 wizyt
pytanie zadane 29 marca 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
edycja 29 marca 2018 przez Hiskiel

Witam!

 

Chodzi mi o to co jest opisie. Mam sobie np. strukturę WIN32_FIND_DATA i teraz zamiast po kolei wypisywać każdy jej element, chciałbym, żeby wszystko było wypisywane automatycznie. Da się tak?

 

Posłużę się np. tym przykładem:

#include <iostream>
#include <windows.h>
#include <fstream>

using namespace std;

int main(){
    WIN32_FIND_DATA F;

    if(FindFirstFile("file.txt", &F)){
        cout<<"File found!"<<endl;
    }else{
        cout<<"Cannot find file."<<endl;
    }

    cout<<F.cAlternateFileName<<endl;
    cout<<F.cFileName<<endl;
    cout<<F.dwFileAttributes<<endl;
    cout<<F.dwReserved0<<endl;
    cout<<F.dwReserved1<<endl;
    cout<<F.ftCreationTime.dwHighDateTime<<endl;
    cout<<F.ftCreationTime.dwLowDateTime<<endl;
    cout<<F.ftLastAccessTime.dwHighDateTime<<endl;
    cout<<F.ftLastAccessTime.dwLowDateTime<<endl;
    cout<<F.ftLastWriteTime.dwHighDateTime<<endl;
    cout<<F.ftLastWriteTime.dwLowDateTime<<endl;
    cout<<F.nFileSizeHigh<<endl;
    cout<<F.nFileSizeLow<<endl;
}

 

Zamiast wypisywać 1000 razy COŚ, to chciałbym zrobić np. jakąś pętlę w której byłyby wypisywane obiekty i "podzmienne".

 

Lub inaczej. Czy jest jakiś sposób, na poznanie liczby zmiennych w danej strukturze i ich potem jakoś ich nazw?

 

Pozdrawiam, Hiskiel.

3 odpowiedzi

+1 głos
odpowiedź 29 marca 2018 przez nik Obywatel (1,640 p.)
Zawsze możesz walnąć jakiegoś toString();
komentarz 29 marca 2018 przez Hiskiel Pasjonat (22,830 p.)
Nic mi o tym nie wiadomo i nie mogę nic o tym znaleźć. Rozwiniesz myśl?
komentarz 29 marca 2018 przez nik Obywatel (1,640 p.)

Jasne, chodzi o to, że w klasie robisz metodę która zwraca przekonwertowane na string elementy klasy. Takie coś :

class A{
	int a;
	string z;

	// kod

	string toString(){ return to_string(a) + " " + z;}	
}

class B{
	int b;
	A c;
	string g;

	// kod

	string toString(){ return to_string(b) + c.toString() + g;}
}

 

0 głosów
odpowiedź 29 marca 2018 przez Bondrusiek Maniak (61,370 p.)
Witam,

można w tym wypadku wykorzystać wzorzec metaobiekt. Taki wzorzec wykorzystuje Qt i na tej podstawie działają tam sygnały i sloty.

https://en.wikipedia.org/wiki/Metaobject
0 głosów
odpowiedź 29 marca 2018 przez mokrowski Mędrzec (155,460 p.)

Odpowiadając krótko na obecny stan standardu języka C++: Nie.

Jeśli jednak zagłębić się w temat, oczywiście istnieje taka możliwość. Problemy które należy przezwyciężyć to uzyskanie informacji o:

1. Przesunięciu danego pola od początku obiektu czy struktury.

2. Jego typie (a więc i wielkości)

3. Jego nazwie zrozumiałej dla człowieka.

Jeśli chcesz te informacje wyłuskać, to masz możliwe drogi:

1. RTTI (Run Time Type Information) https://en.wikipedia.org/wiki/Run-time_type_information

2. Techniki dodatkowych makr budujących te informacje (co robi implementacja metaobiektów dla Qt)

3. Mechanizmy rozszerzeń dla danego kompilatora (np. kernel GNU/Linux intensywnie wykorzystuje rozszerzenia dla gcc by takie cele osiągać dla nawet zwykłego C)

4. Mechanizmy szablonowe które implementują refleksyjność.

5. Czekanie na mechanizmy refleksyjności które są obecnie na etapie propozycji w standardzie.

Każda z tych metod przy omówieniu nie mieści się w zakresie odpowiedzi na forum i ma swoje ograniczenia, dobre i słabe strony, zakres zastosowań dla danego kompilatora.

 

Podobne pytania

0 głosów
1 odpowiedź 139 wizyt
pytanie zadane 13 czerwca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
2 odpowiedzi 296 wizyt
pytanie zadane 27 maja 2018 w C i C++ przez Stu Nowicjusz (190 p.)
0 głosów
1 odpowiedź 231 wizyt
pytanie zadane 23 maja 2016 w C# przez niezalogowany

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...