dynamisk class

Tags:    c++

Hej jeg sad lige og tænkte på om man kan tilføje data members til en class 'on the fly'?
Altså en slags dynamisk klasse.
EX:
Fold kodeboks ind/udKode 

Og hvis man så senere for brug for et 'Adresse' member, kan man så på en eller anden måde tilføje det til klassen, man kunne vel gøre det med en 2d vector med void'er, men det bliver hurtigt noget rod og en masse af de halvfarlige casts.
Fold kodeboks ind/udKode 

Tak
- JonLT



Indlæg senest redigeret d. 17.06.2007 21:09 af Bruger #6465
Nu har jeg ikke selv særlig stor erfaring med C++, men jeg tror seriøst det vil blive noget rod, og enda svær at overskue til sidst.



Såvidt jeg ved understøtter C++ ikke programmering af den slags. Det gør de fleste kompilerede sprog vidst ikke engang. Jeg ved Ruby understøtter det du leder efter, men det er et scriptsprog.



Du kan gøre noget i stil med:
Fold kodeboks ind/udKode 


Her er alle værdierne af type std::string. Man kan godt give dem forskellige typer, hvilket kan gøres ved at lave en container der kan indeholde alle typer.

Et stykke nede på denne side:
http://damb.dk/container.php

Viser jeg hvordan det kan gøres.



Tak for de hurtige svar!
Bertel Brander din brug af maps gav mig en idé. Jeg har lavet en klasse som man kan putte data members og member functions ind i, efter klassen er lavet. Det er dog et par problemer og det bliver meget rodet. De problemer er umiddelbart kan se er:
-At adressere (hedder det det) tilføjne data members i tilføjne member functions.
-At adressere tilføjne member functions i andre tilføjne member functions.
-At frigive data members, dette er et problem da de er tilføjet som void* pointers (deres type er ukendt) og derfor ikke umiddelbart kan slettes.
Så tror jeg at jeg har taget mine forholdsregler :), her er klassen: (jeg har kommenteret på engelsk - det virker mere naturligt)
Fold kodeboks ind/udKode 

Og her er den i aktion
Fold kodeboks ind/udKode 


Hvis i har en bedre idé vil jeg meget gerne hører fra jer!
Jeg elsker at pudsle med den slags ting! :)



Indlæg senest redigeret d. 18.06.2007 01:18 af Bruger #6465

Hvis i har en bedre idé vil jeg meget gerne hører fra jer!
Jeg elsker at pudsle med den slags ting! :)



Du kan eventuelt udvide din datamodel og inkludere typen også. Dvs. både typen på dine metaobjekter og typen på dine medlemsvariable. Herudover kan du indtænke en automatisk persistering af dine objekter, så de automatisk bliver gemt i fx en database, fladfil eller lign.

Hth.



Indlæg senest redigeret d. 18.06.2007 17:41 af Bruger #10448

Du kan eventuelt udvide din datamodel og inkludere typen også.


Jeg er ikke helt sikker på hva du mener her, men jeg har prøvet at gøre følgende uden held.
Fold kodeboks ind/udKode 

dette giver følgende compiler error:
Fold kodeboks ind/udKode 

Jeg har altid syntes at templates er onde så har aldrig brugt dem.

Hva gør jeg galt her?



Som den siger kan man ikke bruge templates på den måde.

For at slippe for de mange cast her og der kan du pakke det hele lidt ind:

Fold kodeboks ind/udKode 




Mange tak for det udførlige svar! Det var nu ikke så meget de definerede typer jeg havde tænkt mig at bruge i klassen (int, double, string og dem). Jeg ville bruge classen til mine egne klasser. Men jeg har fundet ud af at ikke er særlig brugbart når det kommer til stykket. Man tak for svaret!! :)



Du kan gøre det på samme måde som med std::string i mit eksempel.

Det kan godt gøres brugbart ved at pakke det pænt ind i en class.



t