Вопрос

У меня были несколько вопросов по вопросу потоков и прочее, но после немного мысли, я пришел к выводу, что все, что мне нужно, это пользовательский тип промывания. Я хочу, чтобы мой поток вспомогал, когда получает новую строку. Это экономит, чтобы набрать std :: endl. Можно ли это реализовать это? Я использую Ostream с пользовательским stringbuf.

Это было полезно?

Решение

Я верю, что все это примет, является переопределением ostream::put(char), но не процитируйте меня на этом:

template <typename Ch>
class autoflush_ostream : public basic_ostream<Ch> {
public:
    typedef basic_ostream<Ch> Base;
    autoflush_ostream& put(Ch c);
};

template <typename Ch>
autoflush_ostream<Ch>& autoflush_ostream<Ch>::put(Ch c) {
    Base::put(c);
    if (c == "\n") {
        flush();
    }
    return *this;
}

Возможно, вам придется переопределить каждый метод и функцию, которая принимает символ или последовательность символов, которые определены в STL. Все они в основном сделают то же самое: вызовите метод / функцию, определенные на супер классе, проверьте, была ли напечатана ли новая линия и промойте, если так.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top