Nutzung lokaler Klassen mit STL-Algorithmen
Während Sie die Vielschichtigkeit von STL-Algorithmen erkunden, fragen Sie sich vielleicht, ob es nicht möglich ist, lokal definierte Klassen als solche zu verwenden Prädikate innerhalb dieser Algorithmen. Die Ursprünge dieser Einschränkung liegen in den Grenzen der Norm C 98/03.
Gemäß Artikel 14.3.1 der Norm gelten Einschränkungen für Typen, die als Vorlagenparameter dienen. Zu diesen Einschränkungen gehört das Verbot lokaler Typen, Typen ohne Verknüpfung, unbenannter Typen oder Typen, die aus einer Kombination davon abgeleitet sind.
template <class T> class Y { /* ... */ }; void func() { struct S { /* ... */ }; //local class Y< S > y1; // error: local type used as template-argument Y< S* > y2; // error: pointer to local type used as template-argument }
Diese Einschränkung blieb, wenn auch unbeabsichtigt, aufgrund der langsamen Geschwindigkeit der Standardentwicklung bestehen . Nichtsdestotrotz erlauben moderne Compiler, die die Weiterentwicklungen späterer C-Versionen übernehmen, mittlerweile generell die Verwendung lokaler Typen innerhalb von Algorithmen.
Beispiel:
#include <vector> #include <algorithm> int main() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; std::vector<int> v(array, array + 10); struct even : public std::unary_function<int, bool> { bool operator()(int x) { return !(x % 2); } }; std::remove_if(v.begin(), v.end(), even()); // compiles successfully return 0; }
In der aktuellen In der C-Landschaft ist die Verwendung lokal definierter Typen innerhalb von STL-Algorithmen zu einer gängigen Praxis geworden, zusammen mit der Einführung von Lambda-Ausdrücken, was die Algorithmen weiter verbessert Flexibilität.
Das obige ist der detaillierte Inhalt vonKann ich lokale Klassen mit STL-Algorithmen in modernem C verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!