t_drm Δημοσ. 22 Οκτωβρίου 2015 Δημοσ. 22 Οκτωβρίου 2015 Καλησπέρα, πρώτη φορά γράφω εδώ. Μετά από αρκετό καιρό γράφοντας σε C++/OpenGL μου παρουσιάστηκε η ανάγκη να εισάγω σε έναν και μόνο vector αντικείμενα διαφόρων κλάσεων. Σε 2 βιβλία που έχω δυστυχώς δεν περιγράφουν κάποια παραπλήσια διαδικασία. Σκέφτηκα μήπως είναι δυνατών να δημιουργήσω Template Vector αλλά και πάλι δεν βρήκα κάτι παρόμοιο ψάχνοντας στο internet. Έχει κανείς να προτείνει κάτι? Thanx!
groot Δημοσ. 22 Οκτωβρίου 2015 Δημοσ. 22 Οκτωβρίου 2015 Ένας από τους τρόπους, εάν θεωρήσουμε ότι αυτό είναι όντως ανάγκη και όχι κακή σχεδίαση, είναι το any ή το variant από boost. Υ.Γ. Μήπως δεν χρειάζεσαι διαφορετικά classes; Μήπως θα έπρεπε όλα να είναι inherited από μία base;
παπι Δημοσ. 22 Οκτωβρίου 2015 Δημοσ. 22 Οκτωβρίου 2015 Για να τις θες ολες μαζι, τοτε θα εχουν κατι κοινο. Φτιαξε ενα interface με αυτα που θες 1
groot Δημοσ. 22 Οκτωβρίου 2015 Δημοσ. 22 Οκτωβρίου 2015 Για να τις θες ολες μαζι, τοτε θα εχουν κατι κοινο. Φτιαξε ενα interface με αυτα που θες Εάν ήταν Java θα ήσουν μέσα... είναι όμως C++... Οπότε θέλει pure virtual method(s) και άρα abstract class που υλοποιεί την λειτουργικότητα του interface. Για αυτό του είπα για κάποια κοινή base class.
t_drm Δημοσ. 22 Οκτωβρίου 2015 Μέλος Δημοσ. 22 Οκτωβρίου 2015 Δυστυχώς είναι απαίτηση να γίνει με αυτόν τον τρόπο... Από τις προτάσεις κατάλαβα ότι εάν υπάρχει κάτι κοινό τότε υπάρχει λύση?Θα μπορούμε να αλλάξω τις κλάσεις και μέσω κληρονομικότητας να κρατήσω κάποια κοινά πεδία.Τότε πως θα μπορούσε να υλοποιηθεί?
lion2486 Δημοσ. 22 Οκτωβρίου 2015 Δημοσ. 22 Οκτωβρίου 2015 Αν το ήθελα γρήγορα πρόχειρα και μπακάλικα θα έβαζα (void *).
t_drm Δημοσ. 22 Οκτωβρίου 2015 Μέλος Δημοσ. 22 Οκτωβρίου 2015 Τι θες από αυτές τις κλάσεις; Μεγάλη ιστορία... Πολύ απλά φαντάσου ότι κρατάω κάποια δεδομένα διαφορετικά μεταξύ (γι' αυτό και διαφορετικές κλάσεις) όπου στο τέλος θα περάσουν σε μια πλατφόρμα που δέχεται ως είσοδο ΜΟΝΟ έναν vector. Αν το ήθελα γρήγορα πρόχειρα και μπακάλικα θα έβαζα (void *). Αποφεύγω τους void δείκτες, λίγο να ξεχαστείς και θα ψάχνουμε να βρούμε τον λόγο που κρέμασε η εφαρμογή. Και εάν είναι Random οι καταχωρήσεις πως πραγματοποιηθεί το cast?
παπι Δημοσ. 22 Οκτωβρίου 2015 Δημοσ. 22 Οκτωβρίου 2015 Και αυτη η πλατφορμα τι θελει απο αυτες τις κλασεις; 2
t_drm Δημοσ. 22 Οκτωβρίου 2015 Μέλος Δημοσ. 22 Οκτωβρίου 2015 Και αυτη η πλατφορμα τι θελει απο αυτες τις κλασεις; Τα δεδομένα για εμφάνιση. Εάν καταλαβαίνω σωστά την ερώτηση σου.
παπι Δημοσ. 22 Οκτωβρίου 2015 Δημοσ. 22 Οκτωβρίου 2015 Αρα εχουν κατι κοινο. Τι ειναι αυτο; Να φανταστω ολες οι κλασεις εχουν μια συναρτηση "Draw" που εχει ως input την "πλατφορμα"
t_drm Δημοσ. 22 Οκτωβρίου 2015 Μέλος Δημοσ. 22 Οκτωβρίου 2015 Αρα εχουν κατι κοινο. Τι ειναι αυτο; Να φανταστω ολες οι κλασεις εχουν μια συναρτηση "Draw" που εχει ως input την "πλατφορμα" Επίτηδες χρησιμοποιώ κοινά ονόματα σε μεθόδους που εκτελούν τις ίδιες λειτουργίες, με βοηθάει και εμένα. Άρα υπάρχουν κοινές ονομασίες σε μεθόδους, όμως τα πεδία (δεδομένα) δεν είναι όλα ίδια. Σε περίπτωση που δημιουργήσω τις κλάσεις εκ νέου μέσω κληρονομικότητας μπορώ τότε να εισάγω τα αντικείμενα σε έναν μόνο vector?
παπι Δημοσ. 22 Οκτωβρίου 2015 Δημοσ. 22 Οκτωβρίου 2015 Θα φτιαξεις ενα interfece με την συναρτηση draw ή οτι θελει η πλατφορμα σου. Μετα θα οδηγησεις τις κλασεις με αυτο το interface. Τελος, θα φτιαξεις το vector σουμε το interface.
groot Δημοσ. 22 Οκτωβρίου 2015 Δημοσ. 22 Οκτωβρίου 2015 Αδερφέ... t_drm Επίτηδες χρησιμοποιώ κοινά ονόματα σε μεθόδους που εκτελούν τις ίδιες λειτουργίες Αυτό, ας πούμε, είναι ένας λόγος που υπάρχει η κληρονομικότητα (με απλά λόγια) στην C++ (ή το interface που λέει ο παπί και θα ήταν ακριβώς αυτό που θέλεις αλλά σε Java). Μην το πάρεις στραβά, αλλά με προβληματίζει ότι γράφεις καιρό σε C++, λες το από πάνω και δεν σκέφτεται το προφανές. Γνώμη μου: ΔΕΝ γράφεις C++ αλλά C με μερικά καλούδια C++ και σε συνδυασμό με το OpenGL. Έχεις υλοποιήσει λάθος τον σχεδιασμό σου. Άρα! Εκμεταλλεύεσαι την πολλαπλή κληρονομικότητα που δίνει η συ πλας πλας, κάνει μία κλάση με την λειτουργικότητα που θέλεις και την βάζεις να "δίνει" σε αυτά που θέλεις. Μετά, απλά ζητάς τον container να έχει αντικείμενα τύπου της κλάσης που είπα παραπάνω (αυτό είναι βασικά που σου λέει και ο παπί).
Moderators Kercyn Δημοσ. 22 Οκτωβρίου 2015 Moderators Δημοσ. 22 Οκτωβρίου 2015 Ό,τι είπαν και οι παλίκαροι παραπάνω. Στη χειρότερη (δηλαδή αν πραγματικα οι κλάσεις σου δεν έχουν τίποτα άλλο κοινό) κάνε μία κλάση με μια pure virtual Draw και κάνε inherit από κει.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα