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


Anmelden zum Antworten