struct encrypt_stream : public std::stringbuf
{
int sync() { encrypt_buffer(); flush_to_device(); }
...
private:
void encrypt_buffer();
void flush_to_device();
};
Я хочу написать этот класс для шифрования текстовых данных. Каждый раз это stringbuf
объект покраснел, sync
вызывается и зашифрованная версия буфера отправляется на устройство. Зашифрованный текст сильно зависит от того момента, когда flush
называется. Есть ли сложные случаи, когда flush
может быть вызван для этого объекта без запроса пользователя?
я знаю это flush
называется когда std::endl
получено, но есть ли другие случаи, о которых я не знаю?
flush()
вызывается в следующих ситуациях:
std::endl
используется (а именно явный вызов std::ostream::flush()
) [§27.7.3.7 / 7]tie()
-ед выполняет чтение. [§27.7.2.1.3 / 2]overflow()
вызывается для извлечения контента на внешнее устройство, [§27.6.3.4.5 / 3]gptr() == egptr()
вызов underflow()
удалить содержимое и синхронизировать его буфер с внешним устройством. [§27.6.3.4.3 / 7]Это то, что я знаю о стандартных IOStreams. Это может варьироваться в зависимости от реализации вашего потока или потокового буфера.
Других решений пока нет …