2016-03-10 14 views
6

Przy pracy z kodem generycznym w C++, bardzo przydatny byłby funktor std::identity (taki jak). Czy istnieje szczególny powód, dla którego nie ma tego w standardowej bibliotece?Czy istnieje powód, dla którego nie ma std :: identity w standardowej bibliotece?

+3

Był obecny w wersjach przed wersją C++ 11. IIRC, został użyty do zapobieżenia odrzuceniu argumentu szablonu w ['std :: forward'] (http://en.cppreference.com/w/cpp/utility/forward). Gdzieś po drodze ktoś zdał sobie sprawę, że 'remove_reference' jest potrzebny dla' forward', która również zajęła się nieodwzajemnioną częścią kontekstową, a może 'identity' nie była już używana przez nic innego, więc została odrzucona. – Praetorian

+0

Co ciekawe, niektóre implementacje C++ wydają się używać wewnętrznego szablonu 'std :: _ Identity'. – JAB

Odpowiedz

2

Wkrótce po wprowadzeniu identyfikatora std :: identity zaczęły pojawiać się problemy, zaczynając od konfliktów na definicje std :: identity pojawiające się jako rozszerzenia: pre-cpp98: https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/vrrtKvA7cqo Ta strona może dać trochę więcej historii.

+0

Tożsamość może być używana do zapobiegania odliczaniu argumentów szablonu. Boost :: clamp używa tej sztuczki. Zobacz także https://stackoverflow.com/questions/41767240/what-is-stdidentity-and-how-it-is-used. – gast128

Powiązane problemy