for_each + boost::bind = crash ?
Bonjour a tous,
Je souhaite iterer sur une collection (j'utilise donc for_each) et pour chaque element, je souhaite appeler une fonction membre d'une classe quelconque. Par exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class E {
public:
void print(const std::string& str) {
cout << str << endl;
}
};
void test_stl() {
vector<string> strings;
fill_n(back_inserter(strings), 10, "abcd");
fill_n(back_inserter(strings), 12, "hjk");
random_shuffle(strings.begin(), strings.end());
E e;
for_each(strings.begin(), strings.end(), boost::bind(&E::print, e));
} |
Ici, je compte utiliser la classe E pour afficher les chaines (c'est un exemple basique on est d'accord, car je ne ferai pas comme ça s'il ne s'agissait que de faire cela). Le probleme, c'est que VS2005 (quel merveilleux compilateur celui-la) me crashe a la figure en me disant que le compilateur d'optimisation a plante' (mumph...). Voici le message d'erreur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| c:\include\boost\bind.hpp(1575) : warning C4180: qualificateur appliqué au type fonction n'a pas de sens ; ignoré
c:\include\boost\bind.hpp(1609) : voir la référence à l'instanciation de la classe modèle 'boost::_bi::add_cref<Pm,I>' en cours de compilation
with
[
Pm=void (__thiscall E::* )(const std::string &),
I=1
]
**************\langagetest.cpp(424) : voir la référence à l'instanciation de la classe modèle 'boost::_bi::dm_result<Pm,A1>' en cours de compilation
with
[
Pm=void (__thiscall E::* )(const std::string &),
A1=E
]
c:\include\boost\mem_fn.hpp(318) : warning C4180: qualificateur appliqué au type fonction n'a pas de sens ; ignoré
c:\include\boost\bind\bind_template.hpp(225) : voir la référence à l'instanciation de la classe modèle 'boost::_mfi::dm<R,T>' en cours de compilation
with
[
R=void (const std::string &),
T=E
]
Projet : error PRJ0002 : Résultat d'erreur 1 retourné à partir de 'C:\Program Files\Microsoft Visual Studio 8\VC\bin\cl.exe'. |
Quelqu'un sait-il pourquoi VS crashe lamentablement ? Ma version de boost est la 1.34.1.