В настоящее время я пытаюсь реализовать подкласс stringbuf, чтобы разрешить буферу токенизировать для определенных символов ('\ n' в моем случае) и предпринять действия, если этот символ возникает (выгрузить сообщение в логгер и очистить буфер впоследствии в моем случае). Для достижения этой цели я переопределил sputc (чтобы реализовать наблюдение за '\ n') и xsputn (чтобы действительно использовать sputc, поскольку реализация GCC, похоже, не делает этого по умолчанию). В целях отладки я позволил sputc записывать каждый переданный ему символ в stdout.
Теперь это мой вопрос: если я использую что-то вроде
mystream << "Some text" << std::endl;
, sputc получает каждый символ, кроме символа '\ n', который должен быть индуцируется std :: endl, поэтому ожидаемое действие не выполняется, потому что '\ n' не передается. Если я использую что-то вроде
mystream << "Some text" << '\n';
или даже
mystream << "Some text" << "\n" << std::flush;
, все работает, как ожидалось, и моя реализация sputc получает символ '\ n'.
Итак, мой вопрос: не должны ли обе строки кода делать то же самое в отношении stringbuf позади, а если нет, то какие другие методы мне нужно переопределить, чтобы получить '\ n'?