Bonjour,
Je me suis décidé à tester Boost.Lambda dans une partie de mon ancien code, pour remplacer des boucles for par des std::for_each. Bien que je ne sois pas totalement convaincu de l'utilité de tout ça (du moins en C++), j'ai voulu essayer.
Je n'arrive pas à faire exécuter une méthode d'un objet local en passant comme argument différentes valeurs issues d'un vecteur. Je suis pas sûr de me faire comprendre, donc je mets mon code d'essai (qui ne fait pas grand chose d'utile pour l'instant...)
Generator.h
main.cpp
Code : 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
51
52
53
54
55
56
57
58
59 #ifndef GENERATOR_H_ #define GENERATOR_H_ #include <functional> #include <vector> #include <algorithm> #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> template <typename Type> class Functor : public std::unary_function<Type, Type> { public: Functor(const Type& value) : m_value(value) {} Type operator()(const Type& arg) const { return arg * m_value; } // pour l'exemple private: Type m_value; }; template <typename Type> inline Functor<Type> CreateFunctor(const Type& arg) { return Functor<Type>(arg); } //------------------------------------------------------------------------------ template <typename Type> class Generator : public std::unary_function<Type, Type> { public: typedef std::vector<Functor<Type> > FunctorList; void addFunctor(const Functor<Type>& functor) { m_functors.push_back(functor); } Type operator()(const Type& arg) const { using namespace boost::lambda; Type result = Type(); std::for_each(m_functors.begin(), m_functors.end(), result += bind(_1, arg) ); return result; } private: FunctorList m_functors; }; #endif /*GENERATOR_H_*/
Je n'arrive pas à trouver le code pour la ligne commentée dans main()...
Code : 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 #include <iostream> #include <vector> #include <algorithm> #include <boost/assign.hpp> #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> #include "Generator.h" using namespace std; using namespace boost::assign; using namespace boost::lambda; typedef std::vector<double> ValueList; int main() { ValueList list; list += 2.0, 3.14, 10; Generator<double> gen; std::for_each(list.begin(), list.end(), // comment faire: "gen.addFunctor(CreateFunctor(_1))" ? ); cout << gen(10.0) << endl; return 0; }
Merci d'avance
Nicolas
Partager