2016-03-10 9 views
6

Quando si tratta di codice generico in C++, troverei molto utile un functor std::identity (come std::negate). C'è una ragione particolare per cui questo non è presente nella libreria standard?C'è una ragione per cui non c'è std :: identity nella libreria standard?

+3

Era presente in bozze pre-C++ 11. IIRC, è stato usato per prevenire la deduzione degli argomenti del template in ['std :: forward'] (http://en.cppreference.com/w/cpp/utility/forward). A un certo punto, qualcuno ha realizzato che 'remove_reference' era necessario per' forward', che si occupava anche della parte di contesto non deducibile, e forse 'identity' non era più utilizzato da nient'altro, quindi è stato eliminato. – Praetorian

+0

È interessante notare che alcune implementazioni in C++ sembrano utilizzare internamente un modello 'std :: _ Identity'. – JAB

risposta

2

Poco dopo std :: identità è stata introdotta, i problemi cominciarono ad apparire, a partire da conflitti di pre-cpp98 definizioni di std :: identità appaiono come estensioni: https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/vrrtKvA7cqo Questo sito potrebbe dare un po 'più storia per esso.

+0

L'identità può essere utilizzata per impedire la deduzione degli argomenti del modello. Boost :: clamp usa questo trucco. Vedi anche https://stackoverflow.com/questions/41767240/what-is-stdidentity-and-how-it-isused. – gast128

Problemi correlati