Libreria C ++ Istream - sentry
Descrizione
Viene utilizzato per preparare il flusso per l'input. Tutte le funzioni membro che eseguono un'operazione di input costruiscono automaticamente un oggetto di questa classe e quindi lo valutano (che restituisce true se non è stato impostato alcun flag di stato). Solo se questo oggetto restituisce true, la funzione tenta l'operazione di input (in caso contrario, ritorna senza eseguirla). Prima di tornare, la funzione distrugge l'oggetto sentinella.
Dichiarazione
Di seguito è riportata la dichiarazione per std :: basic_istream :: sentry.
C ++ 98
class sentry {
public:
explicit sentry (basic_istream& is, bool noskipws = false);
~sentry();
operator bool() const;
private:
sentry (const sentry&);
sentry& operator= (const sentry&);
};
C ++ 11
class sentry {
public:
explicit sentry (basic_istream& is, bool noskipws = false);
~sentry();
explicit operator bool() const;
sentry (const sentry&) = delete;
sentry& operator= (const sentry&) = delete;
};
Membri
explicit sentry (basic_istream& is, bool noskipws = false); - Prepara il flusso di output per un'operazione di output, eseguendo le azioni descritte sopra.
~sentry(); - Non esegue operazioni (definito dall'implementazione).
explicit operator bool() const; - Quando l'oggetto viene valutato, restituisce un valore bool che indica se il costruttore di sentry ha eseguito con successo tutti i suoi compiti: se a un certo punto del processo di costruzione, è stato impostato un flag di errore interno, questa funzione restituisce sempre false per quell'oggetto.
Esempio
Nell'esempio seguente viene spiegato lo std :: basic_istream :: sentry.
#include <iostream>
#include <string>
#include <sstream>
#include <locale>
struct Phone {
std::string digits;
};
std::istream& operator>>(std::istream& is, Phone& tel) {
std::istream::sentry s(is);
if (s) while (is.good()) {
char c = is.get();
if (std::isspace(c,is.getloc())) break;
if (std::isdigit(c,is.getloc())) tel.digits+=c;
}
return is;
}
int main () {
std::stringstream parseme (" (555)2326");
Phone myphone;
parseme >> myphone;
std::cout << "digits parsed: " << myphone.digits << '\n';
return 0;
}
Compiliamo ed eseguiamo il programma sopra, questo produrrà il seguente risultato:
digits parsed: 5552326