Heim > Backend-Entwicklung > C++ > Kann ich lokale Klassen mit STL-Algorithmen in modernem C verwenden?

Kann ich lokale Klassen mit STL-Algorithmen in modernem C verwenden?

Susan Sarandon
Freigeben: 2024-11-23 10:17:12
Original
563 Leute haben es durchsucht

Can I Use Local Classes with STL Algorithms in Modern C  ?

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
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage