Bij het maken van een soort generische parameter opslag heb ik gemerkt dat het blijkbaar niet zo simpel is in C++ als ik dacht om te weten te komen welk type gegevens echt worden voorgesteld door een bepaalde pointer.
Ik probeer dus een lijst, maakt even niet uit welk ADT het is dus pak maar even een list, van variabelen waarvan ik bij het invoeren wel weet welk type ze zijn, dus int, double, float, string, MyClass, Foo, Bar, function*, int*, Foo*, wat dan ook. Om ze nu in een list te bewaren in C++ lijkt mij de enige optie void* te zijn? Dus dat je enkel de pointer naar de data opslaat. Er is immers geen basisklasse voor de standaardtypes zoals int.
Maar dan komt het probleem, kan ik nu het type nog achterhalen van die data? In Java zou je dan het type opvragen omdat alles van object overerft en dus kan je heel simpel te weten komen welk object gerepresenteerd wordt en daarnaar casten dynamisch. Maar doordat ik er ook ints in wil kwijt raken, en dat er geen globale "object" class is sowieso in C++ zie ik daar geen mogelijkheid voor.
Enkele dingen die ik heb overwogen :
Ik probeer dus een lijst, maakt even niet uit welk ADT het is dus pak maar even een list, van variabelen waarvan ik bij het invoeren wel weet welk type ze zijn, dus int, double, float, string, MyClass, Foo, Bar, function*, int*, Foo*, wat dan ook. Om ze nu in een list te bewaren in C++ lijkt mij de enige optie void* te zijn? Dus dat je enkel de pointer naar de data opslaat. Er is immers geen basisklasse voor de standaardtypes zoals int.
Maar dan komt het probleem, kan ik nu het type nog achterhalen van die data? In Java zou je dan het type opvragen omdat alles van object overerft en dus kan je heel simpel te weten komen welk object gerepresenteerd wordt en daarnaar casten dynamisch. Maar doordat ik er ook ints in wil kwijt raken, en dat er geen globale "object" class is sowieso in C++ zie ik daar geen mogelijkheid voor.
Enkele dingen die ik heb overwogen :
- Maak er een pair<iets, void*> van, waarbij die iets ofwel een enum is voor elk type wat ik wens te gebruiken (nadeel : moet telkens die enum uitbreiden, en dat kan al helemaal niet meer als iemand mijn klasse zou herbruiken)
- ofwel is die iets het datatype... zoals dat je in java de "class" als object kan bewaren, maar in C++ bestaat dat precies niet, je kan niet gewoon als datatype van een parameter "class" of "type" of zo opgeven, of mis ik iets?
- ofwel via een soort typeof functie, maar daar heb ik geen ervaring mee en ik had de indruk dat die alleen op klasses werkte wederom, en niet op ints of iets dergelijks? En dat is dan misschien ook nog eens compiler afhankelijk of dat ondersteund wordt, wat een nadeel kan zijn, omdat de gegevens over het datatype moeten aangemaakt worden ergens.