Ik merk dat ik steeds vaker de std functies van C++ gebruik, maar er zijn er nog steeds enkele die mij keer op keer ontglippen. Aangezien dit tot steeds meer frustratie leidt en ik vast niet de enige ben die hier last van heeft leek het me handig mijn vraag in een topic te plaatsen in de hoop wat duidelijkheid te scheppen 
het probleem: ik heb een lijst met objecten en ik wil graag een specifiek object vinden op basis van een member functie.
Deze methode werkt, al betekend dit dat ik voor elke member functie een eigen klasse moet schrijven.
Het lijkt me dat dit makkelijker moet kunnen
Een mogelijk optie lijkt me dat je je gewenste member als parameter meegeeft aan de bind functie. Aangezien er volgens mij geen trinary_function bestaat zul je dit wellicht moeten oplossen met een std::pair ofzo? Of bestaat er nog een slimmer methode om code duplication tegen te gaan?
alvast bedankt!
het probleem: ik heb een lijst met objecten en ik wil graag een specifiek object vinden op basis van een member functie.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| class Aap { public: Aap( int nummer ) : nr( nummer ) { } int nummer() const { return nr; } private: int nr; }; class DezelfdeAap : public std::binary_function< Aap, int, bool > { public: bool operator()( const Aap &aap, const int &i ) const { return aap.nummer() == i; } }; int main(int argc, char *argv[]) { std::vector< Aap > apen; for( unsigned int i = 0; i < 10; i++ ) { apen.push_back( i ); } std::vector< Aap >::iterator gevonden = std::find_if( apen.begin(), apen.end(), std::bind2nd( DezelfdeAap(), 3 ) ); return 0; } |
Deze methode werkt, al betekend dit dat ik voor elke member functie een eigen klasse moet schrijven.
Het lijkt me dat dit makkelijker moet kunnen
Een mogelijk optie lijkt me dat je je gewenste member als parameter meegeeft aan de bind functie. Aangezien er volgens mij geen trinary_function bestaat zul je dit wellicht moeten oplossen met een std::pair ofzo? Of bestaat er nog een slimmer methode om code duplication tegen te gaan?
alvast bedankt!
oprecht vertrouwen wordt nooit geschaad