Rtti vs magic șablon

Vrei să lucrezi cu obiecte printr-un pointer la clasa de bază IObject și vrei să implementezi isA folosind șabloane. Acest lucru este imposibil, deoarece instanțierea model are loc la compilare-timp, și inițializarea de indicii la IObject are loc în run-time. IObject transmis indicatorul ca argument la NamedObject constructor, astfel încât obj tip este cunoscut doar la run-time, și nu se poate face fără RTTI.

Pentru început, mă gândeam:

Și cum să facă NamedObject nu înfășurați și moștenitor, și prin ea pentru a scăpa de el (iaa) înveliș la RTTI, și de a folosi numai dynamic_cast. Dezavantajul este cauza movilă clase NamedObject, și, în același timp, în acest caz, este dificil de a verifica cu ușurință că clasa este în unele dintre aceste NamedObject, astfel încât învelitoarea din nou. În general, vreau doar să găsesc o soluție mai elegantă, dacă există.

Desigur, am înțeles că, în orice caz, este necesar să se utilizeze dynamic_cast, sub „fără RTTI», eu nu spun deloc „, fără RTTI», și fără suprastructuri lor peste el, sau cel puțin cu simple programe de completare sau cele mai frumoase. În general, acest lucru este pur și simplu de cercetare și interes estetic, din punct de vedere al capacității de lucru actualul sistem este destul de satisfăcător.

Luăm ideea menționată în postările de mai sus și facem un exemplu pentru aceasta:

Pentru a rula o astfel de distribuție, aveți nevoie de moștenire de la o anumită interfață, dar să nu uităm că dynamic_cast nu funcționează gratuit, necesită o taxă virtuală, adică clasa ta trebuie să conțină cel puțin ceva virtual, cel puțin destructor, dar tipul trebuie să fie polimorfic.

Articole similare