Προς το περιεχόμενο

C++ Vector ? ? ?


Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα, πρώτη φορά γράφω εδώ.
 

Μετά από αρκετό καιρό γράφοντας σε C++/OpenGL μου παρουσιάστηκε η ανάγκη να εισάγω σε έναν και μόνο vector αντικείμενα διαφόρων κλάσεων. Σε 2 βιβλία που έχω δυστυχώς δεν περιγράφουν κάποια παραπλήσια διαδικασία.
 

Σκέφτηκα μήπως είναι δυνατών να δημιουργήσω Template Vector αλλά και πάλι δεν βρήκα κάτι παρόμοιο ψάχνοντας στο internet.
 

Έχει κανείς να προτείνει κάτι?

Thanx!

Δημοσ.

Ένας από τους τρόπους, εάν θεωρήσουμε ότι αυτό είναι όντως ανάγκη και όχι κακή σχεδίαση, είναι το any ή το variant από boost. 


Υ.Γ. Μήπως δεν χρειάζεσαι διαφορετικά classes; Μήπως θα έπρεπε όλα να είναι inherited από μία base;

Δημοσ.

Για να τις θες ολες μαζι, τοτε θα εχουν κατι κοινο. Φτιαξε ενα interface με αυτα που θες

 

 

Εάν ήταν Java θα ήσουν μέσα... είναι όμως C++... Οπότε θέλει pure virtual method(s) και άρα abstract class που υλοποιεί την λειτουργικότητα του interface. 

 

 

Για αυτό του είπα για κάποια κοινή base class.

Δημοσ.

Δυστυχώς είναι απαίτηση να γίνει με αυτόν τον τρόπο...

Από τις προτάσεις κατάλαβα ότι εάν υπάρχει κάτι κοινό τότε υπάρχει λύση?
Θα μπορούμε να αλλάξω τις κλάσεις και μέσω κληρονομικότητας να κρατήσω κάποια κοινά πεδία.
Τότε πως θα μπορούσε να υλοποιηθεί?

Δημοσ.

Τι θες από αυτές τις κλάσεις;

Μεγάλη ιστορία... Πολύ απλά φαντάσου ότι κρατάω κάποια δεδομένα διαφορετικά μεταξύ (γι' αυτό και διαφορετικές κλάσεις) όπου στο τέλος θα περάσουν σε μια πλατφόρμα που δέχεται ως είσοδο ΜΟΝΟ έναν vector.

 

Αν το ήθελα γρήγορα πρόχειρα και μπακάλικα θα έβαζα (void *).

Αποφεύγω τους void δείκτες, λίγο να ξεχαστείς και θα ψάχνουμε να βρούμε τον λόγο που κρέμασε η εφαρμογή. Και εάν είναι Random οι καταχωρήσεις πως πραγματοποιηθεί το cast?

Δημοσ.

Και αυτη η πλατφορμα τι θελει απο αυτες τις κλασεις;

 

Τα δεδομένα για εμφάνιση. Εάν καταλαβαίνω σωστά την ερώτηση σου.

Δημοσ.

Αρα εχουν κατι κοινο. Τι ειναι αυτο; Να φανταστω ολες οι κλασεις εχουν μια συναρτηση "Draw" που εχει ως input την "πλατφορμα"

Δημοσ.

Αρα εχουν κατι κοινο. Τι ειναι αυτο; Να φανταστω ολες οι κλασεις εχουν μια συναρτηση "Draw" που εχει ως input την "πλατφορμα"

Επίτηδες χρησιμοποιώ κοινά ονόματα σε μεθόδους που εκτελούν τις ίδιες λειτουργίες, με βοηθάει και εμένα. Άρα υπάρχουν κοινές ονομασίες σε μεθόδους, όμως τα πεδία (δεδομένα) δεν είναι όλα ίδια. Σε περίπτωση που δημιουργήσω τις κλάσεις εκ νέου μέσω κληρονομικότητας μπορώ τότε να εισάγω τα αντικείμενα σε έναν μόνο vector?

Δημοσ.

Θα φτιαξεις ενα interfece με την συναρτηση draw ή οτι θελει η πλατφορμα σου. Μετα θα οδηγησεις τις κλασεις με αυτο το interface. Τελος, θα φτιαξεις το vector σουμε το interface.

Δημοσ.

Αδερφέ... t_drm

 

 

Επίτηδες χρησιμοποιώ κοινά ονόματα σε μεθόδους που εκτελούν τις ίδιες λειτουργίες

 

 

Αυτό, ας πούμε, είναι ένας λόγος που υπάρχει η κληρονομικότητα (με απλά λόγια) στην C++ (ή το interface που λέει ο παπί και θα ήταν ακριβώς αυτό που θέλεις αλλά σε Java). 

 

Μην το πάρεις στραβά, αλλά με προβληματίζει ότι γράφεις καιρό σε C++, λες το από πάνω και δεν σκέφτεται το προφανές. 

 

 

Γνώμη μου:

 

ΔΕΝ γράφεις C++ αλλά C με μερικά καλούδια C++ και σε συνδυασμό με το OpenGL. Έχεις υλοποιήσει λάθος τον σχεδιασμό σου. 


Άρα!

 

Εκμεταλλεύεσαι την πολλαπλή κληρονομικότητα που δίνει η συ πλας πλας, κάνει μία κλάση με την λειτουργικότητα που θέλεις και την βάζεις να "δίνει" σε αυτά που θέλεις. 

 

Μετά, απλά ζητάς τον container να έχει αντικείμενα τύπου της κλάσης που είπα παραπάνω (αυτό είναι βασικά που σου λέει και ο παπί). 

  • Moderators
Δημοσ.

Ό,τι είπαν και οι παλίκαροι παραπάνω. Στη χειρότερη (δηλαδή αν πραγματικα οι κλάσεις σου δεν έχουν τίποτα άλλο κοινό) κάνε μία κλάση με μια pure virtual Draw και κάνε inherit από κει.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...