C++ Istream Library - sentry


Advertisements

Description

It is used to prepare stream for input. All member functions that perform an input operation automatically construct an object of this class and then evaluate it (which returns true if no state flag was set). Only if this object evaluates to true, the function attempts the input operation (otherwise, it returns without performing it). Before returning, the function destroys the sentry object.

Declaration

Following is the declaration for 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;
};

Members

  • explicit sentry (basic_istream& is, bool noskipws = false); − Prepares the output stream for an output operation, performing the actions described above.

  • ~sentry(); − Performs no operations (implementation-defined).

  • explicit operator bool() const; − When the object is evaluated, it returns a bool value indicating whether the sentry constructor successfully performed all its tasks: If at some point of the construction process, an internal error flags was set, this function always returns false for that object.

Example

In below example explains about 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;
}

Let us compile and run the above program, this will produce the following result −

digits parsed: 5552326
istream.htm
Advertisements