Может ли пользовательский буфер потока автоматически очищаться при выходе из программы и при запросе ввода?

Martin York предоставляет этот пользовательский паровой буфер. Как я могу изменить класс на автоматическую очистку при чтении из cin:: cin или когда приложение существует? Например:

int main ()
{
    MyStream myStream(std::cout);
    myStream << "This does not print.";
}

а также

int main()
{
    MyStream myStream(std::cout);
    myStream << "This does not print.";
    std::cin.get();
}

в то время как

std::cout << "This does print.";

а также

std::cout << "This does print.";
std::cin.get();

Если я заставлю это

myStream << "This will now print." << std::flush;

Тем не менее, я надеюсь повторить поведение cout триггера при выходе из программы или std:: cin автоматически.

Это работает (благодаря "Стандартной библиотеке C++" Джозуттиса):

    MyStream myStream(std::cout);
    std::cin.tie(&myStream);
    myStream << "This will now print.";
    std::cin.get();

так как std::cint.tie(&std::cout) это предопределенное соединение.

Вопрос № 1: Могу ли я изменить класс MyStream, чтобы связать его с потоком cin, чтобы мне не нужно было выдавать std::cin.tie(&myStream) каждый раз, когда я создаю экземпляр?

Вопрос № 2: Как можно изменить класс MyStream, чтобы буфер автоматически очищался при выходе из программы?

1 ответ

Решение
  1. Конструкторы предназначены для работы во время создания объекта, поэтому было бы целесообразно установить связь в конструкторе MyStream: std::cin.tie(this);, Это, вероятно, разорвет любую связь, которая существует между cin а также coutили между cin abd другой экземпляр вашего потокового класса.
  2. Для работы при выходе из программы в C++ есть деструкторы объектов со статической продолжительностью хранения.
Другие вопросы по тегам