παπι Δημοσ. 18 Μαΐου 2012 Δημοσ. 18 Μαΐου 2012 Πως ονομαζεται η παρακατω μακαροναδα; >class Y1{}; class Y2{}; class YN{}; template < class T > class A : A <T> { }; template <> class A <Y1> { }; template <> class A <Y2> { }; template <> class A <YN> { };
defacer Δημοσ. 19 Μαΐου 2012 Δημοσ. 19 Μαΐου 2012 Αν εννοείς αυτό > template < class T > class A : A <T> {}; ονομάζεται CRTP. Τα υπόλοιπα δεν έχουν τίποτα το ξεχωριστό. Αλλά έχω αμφιβολίες μήπως δεν κατάλαβα την ερώτηση γιατί αν έπρεπε να στοιχηματίσω θα πόνταρα ότι το ξέρεις ήδη.
παπι Δημοσ. 19 Μαΐου 2012 Μέλος Δημοσ. 19 Μαΐου 2012 Οχι αυτο. Λαθος μου >class Y1{}; class Y2{}; class YN{}; template < class T > class A { }; template <> class A <Y1> { }; template <> class A <Y2> { void foi(){} }; template <> class A <YN> { void bar(){} }; A<Y2>::foo <-- υπαρχει A<Y2>::bar <-- δεν υπαρχει Δηλαδη το να εχεις διαφορετικες κλασεις αναλογα του template (ξερω τι κανει απλος δεν ξερω πως ονομαζεται, και θελω να δω που βολευει)
defacer Δημοσ. 19 Μαΐου 2012 Δημοσ. 19 Μαΐου 2012 OK τότε μήπως policy-based design? Στην ουσία δηλαδή το ίδιο πράγμα που κάνουν πολλές template classes της standard library παίρνοντας traits και allocator σαν type parameter (π.χ. std::basic_string). Ακόμα όμως δεν ξέρω αν κατάλαβα.
παπι Δημοσ. 19 Μαΐου 2012 Μέλος Δημοσ. 19 Μαΐου 2012 OK τότε μήπως policy-based design? Στην ουσία δηλαδή το ίδιο πράγμα που κάνουν πολλές template classes της standard library παίρνοντας traits και allocator σαν type parameter (π.χ. std::basic_string). Ακόμα όμως δεν ξέρω αν κατάλαβα. nop Τωρα που δοκιμασα ειδα οτι γινεται και σε functions πχ >template <class T> void foo(T t) { std::cout<<"Ayto to impl einai gia otidipote ektos apo int kai double"<<std::endl; } template<> void foo<int>(int t) { std::cout<<"Ayto impl einai mono gia int"<<std::endl; } template<> void foo<double>(double d) { std::cout<<"Ayto to imp einai mono gia double"<<std::endl; } int main(int argc, char *argv[]) { foo(1); foo(1.1); foo(""); αοθτπθτ >Ayto impl einai mono gia int Ayto to imp einai mono gia double Ayto to impl einai gia otidipote ektos apo int kai double ΥΓ τωρα ειναι πιο κατανοητο υγ2 δηλαδη κανει overload αλλα εξαρτωμενο απο το template υγ3 το βρηκα, partial specialization υγ4 γαμω τα αγγλικα μου γαμω....
defacer Δημοσ. 20 Μαΐου 2012 Δημοσ. 20 Μαΐου 2012 Βασικά αυτό είναι full specialization. Partial specialization είναι π.χ. αυτό: >template<class X, class Y> class Foo {} // αρχικό template template<class Y> class Foo<int, Y> class Foo {} // specialized για όλα τα Y όταν Χ = int και αυτό: >template<class Τ> class Foo {} // αρχικό template template<class Τ> class Foo<Τ*> class Foo {} // specialized για όλα τα Τ που είναι pointer types Επίσης, partial specialization γίνεται σε class templates αλλά όχι σε function templates -- εκεί όμως υπάρχουν άλλα κόλπα με τα οποία μπορείς να καταλήξεις στο ίδιο αποτέλεσμα (π.χ. με overloads ή κάνοντας την function ένα non-specialized member ενός partially specialized class template).
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα