2016-03-10 27 views
6

Beim Umgang mit generischem Code in C++, würde ich einen std::identity Funktor (wie std::negate) sehr nützlich finden. Gibt es einen besonderen Grund, warum dies in der Standardbibliothek nicht vorhanden ist?Gibt es einen Grund, warum es nicht std :: identity in der Standardbibliothek gibt?

+3

Es war in Pre-C++ 11 Entwürfe vorhanden. IIRC, wurde verwendet, um Vorlage Argumentableitung in ['std :: forward '] (http://en.cppreference.com/w/cpp/utility/forward) zu verhindern. Irgendwo auf dem Weg wurde jemandem klar, dass 'remove_reference' für' forward' benötigt wurde, was auch für den nicht ableitbaren Kontext Teil sorgte, und vielleicht wurde 'identity' von nichts anderem mehr verwendet, so dass es gelöscht wurde. – Praetorian

+0

Interessanterweise scheinen einige C++ - Implementierungen intern eine 'std :: _ Identity'-Vorlage zu verwenden. – JAB

Antwort

2

Bald nach std :: Identität eingeführt wurde, begann Fragen zu erscheinen, mit Konflikten beginnen zu vorab cpp98 Definitionen von std :: Identität als Erweiterungen erscheinen: https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/vrrtKvA7cqo Diese Seite könnte ein wenig mehr Geschichte geben.

+0

Die Identität kann verwendet werden, um die Ableitung von Vorlagenargumenten zu verhindern. Boost :: clamp benutzt diesen Trick. Siehe auch https://stackoverflow.com/questions/41767240/what-is-stdidentity-and-how-it-is-used. – gast128

Verwandte Themen