Funktionsobjekte und find_if
-
Ich habe folgende Frage:
wenn ich den folgenden Quelltext(etwas vereinfacht) verwende, bekomme ich die Fehlermeldung, dass die Funktion find_if nicht definiert ist.std::string CAttributesTemplate::getAttributeDescription() const{ struct name_equal{ bool operator()(const io::IAttributeTemplate* const t) const{ // ... } }; name_equal s; std::vector<const IAttributeTemplate*>::const_iterator it=std::find_if(data.begin(), data.end(), s); }ich habe also als Prädikat ein Objekt einer lokalen Struktur einer in einer Memberfunktion übergeben.
Wenn ich den Code aber so schreibe, dass name_equal außerhalb der Klasse steht, dann funktionier es.
struct name_equal{ bool operator()(const io::IAttributeTemplate* const t) const{ // ... } }; std::string CAttributesTemplate::getAttributeDescription() const{ name_equal s; std::vector<const IAttributeTemplate*>::const_iterator it=std::find_if(data.begin(), data.end(), s); }Warum ist das so?
Oder ist das ein Problem des Compilers (gcc 3.4.5 (mingw))?
-
Das geht noch nicht. Man kann keine solche in einer Funktion definierte Struktur als Funktor benutzen. In C++0x soll das dann aber gehen.
-
"Lokale Typen" werden als Template-Parameter (noch) nicht unterstützt.
-
OK, danke für die Information