User Tools

Site Tools


cpp:functors

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cpp:functors [2020/05/31 20:34] gthanoscpp:functors [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 5: Line 5:
 ===== Η συνάρτηση for_each ===== ===== Η συνάρτηση for_each =====
  
-Η συνάρτηση [[http://www.cplusplus.com/reference/algorithm/for_each/|std::for_each]] επιτρέπει την μεταβολή του περιεχομένου οποιουδήποτε //container// από μία συνάρτηση. Η υλοποίηση της συνάρτησης δίνεται παρακάτω:+Η συνάρτηση [[http://www.cplusplus.com/reference/algorithm/for_each/|std::for_each]] επιτρέπει την μεταβολή του περιεχομένου ενός //container// από //first// έως //last// (μη συμπεριλαμβανομένου) από τη συνάρτηση //fn//. Η υλοποίηση της συνάρτησης δίνεται παρακάτω:
 <code cpp> <code cpp>
 template<class InputIterator, class Function> template<class InputIterator, class Function>
Line 17: Line 17:
 </code> </code>
  
-Παρακάτω δίνεται ένα παράδειγμα, όπου στα περιεχόμενα ενός ''vector<string>'' προστίθεται το //prefix// "light":+Παρακάτω δίνεται ένα παράδειγμα, όπου στα περιεχόμενα ενός ''vector<string>'' προστίθεται το //prefix// "light" με τη βοήθεια της συνάρτησης //prefixMe//:
  
 <code cpp prefix_str.cpp> <code cpp prefix_str.cpp>
Line 49: Line 49:
 } }
 </code> </code>
 +
 +==== Χρήση ενός function object αντί για συνάρτηση ====
  
 Παρατηρήστε ότι ο κώδικας δουλεύει σωστά, με την υποσημείωση ότι κάθε φορά που θέλετε να αλλάξετε το prefix το οποίο προστίθεται στα περιεχόμενα του //container// πρέπει να γράφετε μία νέα συνάρτηση. Αντί για αυτό θα μπορούσαμε να χρησιμοποιήσουμε ένα αντικείμενο ως συνάρτηση το οποίο να έχει τα εξής χαρακτηριστικά: Παρατηρήστε ότι ο κώδικας δουλεύει σωστά, με την υποσημείωση ότι κάθε φορά που θέλετε να αλλάξετε το prefix το οποίο προστίθεται στα περιεχόμενα του //container// πρέπει να γράφετε μία νέα συνάρτηση. Αντί για αυτό θα μπορούσαμε να χρησιμοποιήσουμε ένα αντικείμενο ως συνάρτηση το οποίο να έχει τα εξής χαρακτηριστικά:
Line 54: Line 56:
   - υπερφορτώνει τον τελεστή () (//operator()//) με ένα μόνο όρισμα τύπου //std::string//, ώστε να μπορούμε να το χρησιμοποιήσουμε ως συνάρτηση.   - υπερφορτώνει τον τελεστή () (//operator()//) με ένα μόνο όρισμα τύπου //std::string//, ώστε να μπορούμε να το χρησιμοποιήσουμε ως συνάρτηση.
  
-Ένα τέτοιο αντικείμενο ονομάζεται //function object ή functor//. Δείτε το παρακάτω παράδειγμα όπου ορίζουμε την κλάση //PrefixString//, η οποία δημιουργεί ένα //function object//.+Ένα τέτοιο αντικείμενο ονομάζεται //function object ή functor//. Δείτε το παρακάτω παράδειγμα όπου ορίζουμε την κλάση //PrefixString//, η οποία λαμβάνει στον κατασκευαστή της ένα std::string που θα αποτελέσει το //prefix//. Με βάση τον παρακάτω κώδικα, χρησιμοποιώντας αντικείμενα της συγκεκριμένης κλάσης ως συναρτήσεις, μπορούμε να καλέσουμε διαφορετικές εκδόσεις της συνάρτησης που προσθέτει το //prefix//, απλά αλλάζοντας την παράμετρο στον κατασκευαστή της.
  
 <code cpp prefix_str_function_object.cpp> <code cpp prefix_str_function_object.cpp>
cpp/functors.1590957292.txt.gz · Last modified: 2020/05/31 19:34 (external edit)