2016-03-10 2 views
6

En traitant du code générique en C++, je trouverais un foncteur très utile (comme std::negate). Y at-il une raison particulière pour laquelle cela n'est pas présent dans la bibliothèque standard?Y at-il une raison pour laquelle il n'y a pas std :: identity dans la bibliothèque standard?

+3

Il était présent dans les brouillons pré-C++ 11. IIRC, il a été utilisé pour empêcher la déduction d'argument de modèle dans ['std :: forward'] (http://en.cppreference.com/w/cpp/utility/forward). Quelque part sur le chemin, quelqu'un a réalisé 'remove_reference' était nécessaire pour' forward', qui prenait aussi en charge la partie contexte non déductible, et peut-être que 'identity' n'était plus utilisé par rien d'autre, donc il a été abandonné. – Praetorian

+0

Fait intéressant, certaines implémentations C++ semblent utiliser un modèle 'std :: _ Identity' en interne. – JAB

Répondre

2

Peu après l'identité std :: a été introduit, les problèmes ont commencé à apparaître, à commencer par les conflits de pré-cpp98 définitions de l'identité std :: apparaissant comme des extensions: https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/vrrtKvA7cqo Ce site pourrait donner un peu plus d'histoire pour elle.

+0

L'identité peut être utilisée pour empêcher la déduction d'arguments de modèle. Boost :: clamp utilise cette astuce. Voir aussi https://stackoverflow.com/questions/41767240/what-is-stdidentity-and-how-it-is-used. – gast128