Bonjour j'essai d'utiliser accumulate pour faire un somme en utilisant une fonction membre comme foncteur
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #include <vector> #include <algorithm> #include <numeric> #include <functional> class Vehicule { public: virtual int GetNbRoues() =0; template <class T> T addtest(T &a) {return a+=GetNbRoues();}; }; class voiture : public Vehicule { public: virtual int GetNbRoues() {return 4;}; }; class moto : public Vehicule { public: virtual int GetNbRoues() {return 2;}; }; template<class T1, class T2> T1 & addNay2 (T1 &a,T2 &b){return a+=b->GetNbRoues();}; int main(int argc, char* argv[]) { std::vector<Vehicule*> vect; vect.push_back( new voiture); vect.push_back(new voiture); vect.push_back(new moto); vect.push_back(new moto); vect.push_back(new voiture); vect.push_back(new moto); vect.push_back(new moto); vect.push_back(new voiture); int nb =std::accumulate(vect.begin(),vect.end(),0.f, std::mem_fun(&Vehicule::addtest<int>)); return 0; }
mais accumulate n'envoye pas les paramètres dans le bon sens,
TY =func(Ty,pToto) au lieu de TY =func(pToto,Ty).
existe t'il un fonction qui inverse les parametres?
j'ai essayer de definir un mem_fun avec les parametre inversé
ca marche mais je ne trouve pas ca propre
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
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 template<class _Result, class _Ty, class _Arg> class mem_fun1_tr : public std::binary_function<_Arg,_Ty *, _Result> { // functor adapter (*p->*pfunc)(val), non-const *pfunc public: explicit mem_fun1_tr(_Result (_Ty::*_Pm)(_Arg)) : _Pmemfun(_Pm) { // construct from pointer } _Result operator()(_Arg _Right,_Ty *_Pleft) const { // call function with operand return ((_Pleft->*_Pmemfun)(_Right)); } private: _Result (_Ty::*_Pmemfun)(_Arg); // the member function pointer }; template<class _Result, class _Ty, class _Arg> inline mem_fun1_tr<_Result, _Ty, _Arg> mem_funr(_Result (_Ty::*_Pm)(_Arg)) { // return a mem_fun1_t functor adapter return (mem_fun1_tr<_Result, _Ty, _Arg>(_Pm)); }
Partager