Как все типы разных размеров соотносятся друг с другом?

В настоящее время у меня есть сценарий, в котором я хочу проверить, приведет ли запись данной строки к файловому потоку к увеличению файла сверх заданного размера (это используется для ротации файла журнала ). Теперь std :: ofstream :: tellp () возвращает streampos , но std :: string :: size () возвращает size_t . Эффект состоит в том, что это не работает:

out_stream.tellp() + string.size() < limit

, потому что очевидно существует неоднозначная перегрузка operator + для этих типов. Это приводит меня к двум вопросам:

  1. Как я могу разрешить указанную выше неоднозначность?
  2. Как все разные типы ( size_t , streamsize , streampos ], streamoff ) связаны друг с другом? Когда их можно будет безопасно преобразовать, и каковы возможные подводные камни. Я вообще не понимаю эти типы. Все, что я знаю, это то, что они зависят от реализации и что они дают определенные гарантии (например, size_t всегда достаточно велик, чтобы удерживать размер большого объекта, который поместился бы в память на архитектуре, для которой приложение было скомпилирован), но каковы гарантии взаимодействия этих типов (см. пример выше, или сравнивая streamsize с size_t )?
8
задан Björn Pollex 10 March 2011 в 15:53
поделиться