Ваш ustring
не проблема - просто никто не сказал компилятору, как распечатать ustring
.Нет общего способа сделать это главным образом потому, что для разных типов символов может потребоваться разная обработка (в зависимости от локали и кодировки).
Чтобы это исправить, вам нужно определить свой собственный operator<<
typedef basic_string<unsigned char> ustring;
ostream& operator<<(ostream& stream, const ustring& str)
{
// Print your ustring into the ostream in whatever way you prefer
return stream;
}
Однако мне интересно, каков ваш вариант использования basic_string
здесь.По моему опыту, байтовые последовательности, которые не переводятся напрямую в текстовые данные, лучше обслуживаются std::vector<uint8_t>
, а строки с большими диапазонами, чем ASCII (если вы не можете использовать UTF-8 по некоторым причинам) - std::wstring
.Первый, очевидно, не имеет никаких прямых методов вывода (вам снова нужно было бы придумать что-то нестандартное, но в этом случае это гораздо более очевидно, что предполагается), а второй поддерживает вывод непосредственно в std::wcout
и т. Д.