Хм, не стоит заменять size_t
(максимально переносимая вещь) на менее переносимый тип C99 фиксированного или минимального размера без знака.
С другой стороны, вы можете избежать многихтехнических проблем (потерянное время), используя вместо этого подписанный тип ptrdiff_t
.Стандартная библиотека использует тип unsigned только по историческим причинам.Это имело смысл в свое время, и даже сегодня, для 16-битных архитектур, но, как правило, это не что иное, как проблемы и многословие.
Внесение этого изменения требует некоторой поддержки, в частности aобщая size
функция , которая возвращает размер массива или контейнера как ptrdiff_t
.
Теперь, что касается подписи вашей функции
StatusType writeBytes(......, size_t& bytesWritten);
Это заставляет выбрать тип вызывающего кода для числа записанных байтов.
И затем, с типом без знакаsize_t
принудительно, легко ввести ошибку, например, проверив, является ли она меньше или больше некоторой вычисленной величины.
Гротескный пример: std::string("ah").length() < -5
гарантировано true
.
Итак, вместо этого сделайте это…
Size writeBytes(......);
или, если вы не хотите использовать исключения,
Size writeBytes(......, StatusType& status );
Допустимо перечисление возможных состояний в качестве типа без знакаили как угодно, потому что единственными операциями над значениями состояния будут проверка на равенство и, возможно, в качестве ключей.