Biblioteca C ++ Istream - sentinela
Descrição
É usado para preparar o fluxo para entrada. Todas as funções de membro que executam uma operação de entrada constroem automaticamente um objeto desta classe e o avaliam (que retorna verdadeiro se nenhum sinalizador de estado foi definido). Somente se este objeto for avaliado como verdadeiro, a função tentará a operação de entrada (caso contrário, ela retornará sem realizá-la). Antes de retornar, a função destrói o objeto sentinela.
Declaração
A seguir está a declaração para 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;
};
Membros
explicit sentry (basic_istream& is, bool noskipws = false); - Prepara o fluxo de saída para uma operação de saída, executando as ações descritas acima.
~sentry(); - Não executa nenhuma operação (definido pela implementação).
explicit operator bool() const; - Quando o objeto é avaliado, ele retorna um valor booleano indicando se o construtor da sentinela realizou com sucesso todas as suas tarefas: Se em algum ponto do processo de construção, um sinalizador de erro interno foi definido, esta função sempre retorna falso para aquele objeto.
Exemplo
No exemplo a seguir explica sobre 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;
}
Vamos compilar e executar o programa acima, isso produzirá o seguinte resultado -
digits parsed: 5552326