Я определенно не одобряю решение, которое я собираюсь предложить. Я также подозреваю, что это не может быть разрешено стандартом, но пока я не могу это доказать. Если кто-то может предоставить мне ссылку, которая показывает, что это не разрешено, я удалю этот ответ. В любом случае, мои тесты пока показывают, что просто перегрузка оператора в глобальной области видимости работает.
#include <iostream>
#include <cstdint>
std::ostream & operator<<(std::ostream & os, std::uint8_t val)
{
return os << static_cast<int>(val);
}
int main()
{
std::uint8_t val = 123;
std::cout << val;
}
Я бы не подумало, что это будет работать, но потом я понял, что char/unsigned char/signed char
перегрузок для operator<<
всех свободных функций в std
имен подобраны ADL. И я думаю, что глобальные функции считаются лучшими, чем функции ADL, но я не уверен в этом.
Почему бы вам не передать фактический int, что вы имеете в виду при каждом запуске вашего кода – aaronman
@aaronman У меня есть функция, которая возвращает массив 'uint_8', я не хочу использовать приведение, когда я попробуйте написать этот массив в cout ... – Sayakiss
если это важно для вопроса, вы должны опубликовать его с остальными, на данный момент вопрос действительно не имеет смысла. – aaronman