Stel ik heb een array van pointers en die wil ik allemaal naar specifieke templates specialisations laten wijzen die allemaal van verschillende typen kunnen zijn. Eg zoiets als maar dan met templates:
De template versie compile-t natuurlijk niet, maar hoe krijg ik het voor elkaar dat het wel juist werkt? Die type informatie ben ik natuurlijk kwijt als ik de classes zo opsla op dit moment. Om het werkend te krijgen heb ik een paar heel lelijke hacks (eg casts) gebruikt om het werkend te krijgen (zie onderin) waar ik dan de type steeds had wanneer ik deze classes gebruikte en naar het juiste type casttte. Alleen de destructor ging verkeerd omdat het van myClass<void*> werd aangeroepen en niet van de juiste implementaties. Is wat ik wil wel mogelijk?
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| class myClass { int a; }; int main() { myClass a; myClass b; myClass c; myClass* base[3]; base[0] = &a; base[1] = &b; base[2] = &c; [s][/s]return 0; } |
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| template <class T> class myClass { T a; }; int main() { myClass<int> a; myClass<char> b; myClass<double> c; myClass* base[3]; base[0] = &a; base[1] = &b; base[2] = &c; |
De template versie compile-t natuurlijk niet, maar hoe krijg ik het voor elkaar dat het wel juist werkt? Die type informatie ben ik natuurlijk kwijt als ik de classes zo opsla op dit moment. Om het werkend te krijgen heb ik een paar heel lelijke hacks (eg casts) gebruikt om het werkend te krijgen (zie onderin) waar ik dan de type steeds had wanneer ik deze classes gebruikte en naar het juiste type casttte. Alleen de destructor ging verkeerd omdat het van myClass<void*> werd aangeroepen en niet van de juiste implementaties. Is wat ik wil wel mogelijk?
C++:
1
2
| myClass<void*>* base[3]; base[0] = reinterpret_cast<myClass<void*>*>(&a); |
[ Voor 3% gewijzigd door Darkvater op 21-10-2008 22:12 ]
Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge