C++ 11 introduce un oggetto chiamato std::ignore
:Requisiti per std :: ignorano
const /* unspecified */ ignore;
Per brevità, diamo
typedef decltype(std::ignore) T;
Da quello che posso dire, l'unico requisito per T
è che è CopyAssignable
, a causa delle specifiche di std::tie
[C++ 11, 20.4.2.4:7].
In g ++ - 4.8, trovo che T
è inoltre DefaultConstructible
(ad esempio, T x;
compila). Questo comportamento definito dall'implementazione?
(Se non ci sono altri requisiti di T
che ho perso, si prega di elaborare.)
http://stackoverflow.com/questions/16227391/please-explain-this-code-that-uses-stdignore –
Questa è una domanda interessante. Qual è la motivazione dietro di esso? Sembra chiaro che l'intero scopo di std :: ignore sia quello di essere un segnaposto: una sorta di tag. Non sembra avere alcun uso oltre a quello, in particolare con std :: tie. –
Nessuna applicazione pratica. Sto facendo un iteratore "zip" (vedi, per esempio, boost) che consente all'utente di comprimere un iteratore "fittizio".Un caso d'uso supporta 'std :: copy_if' quando gli iteratori di input sono zip iterator e l'iteratore di output è un iteratore di zip con un sottoinsieme degli elementi di tupla (degli input). Mi chiedevo cosa sarebbe successo se un iteratore zip con elementi 'ignore'd fosse usato come un' InputIterator', perché il valore restituito da 'operator *' deve essere convertibile in una tupla contenente un oggetto di tipo 'T'. (Forse 'DefaultConstructible'ity è un requisito più forte del necessario.) – nknight