Проверьте, установлен ли флаг skipws / noskipws для входного потока - PullRequest
1 голос
/ 20 марта 2019

Чтобы установить флаг std::skipws (или std::noskipws), необходимо написать:

my_input_stream >> std::skipws; //or my_input_stream >> std::noskipws;

Но как мне проверить , установлен ли флаг? Мне нужно включить noskipws для моего operator >>, но я хочу восстановить ранее установленное значение после. Мне известно о средствах сохранения состояния буста ввода / вывода, но мне нужно сделать демонстрацию для студентов, и использование буста может оказаться излишним для этой простой цели.

Ответы [ 3 ]

4 голосов
/ 20 марта 2019

Вы ищете std::ios_base::flags():)

3 голосов
/ 20 марта 2019

Вам необходимо использовать функцию-член flags().Это вернет текущие флаги, и вы можете проверить, установлен ли флаг std::ios_base::skipws, например:

int main()
{
    std::cin >> std::noskipws;
    if (!(std::cin.flags() & std::ios_base::skipws))
        std::cout << "no skipws set\n";
    std::cin >> std::skipws;
    if (std::cin.flags() & std::ios_base::skipws)
        std::cout << "skipws set";
}
3 голосов
/ 20 марта 2019

Вы должны использовать флаги вашего потока:

my_input_stream.flags() & std::ios_base::skipws
...