Как инициализировать пользовательский аналог для std::cout?
Я пытаюсь реализовать свой собственныйbasic_string
, но столкнулся с проблемой печати моих строк. я не собираюсь использоватьstd::char_traits
и другие трейты из std, которые я реализовал сам. Как я могу создать прямой аналог того, что можно было бы использовать для моих строк и использоватьstd::basic_ostream
для этого? (не буду создаватьbasic_ostream
сам).
Я попробовал несколько подходов к проблеме. Я создал следующий оператор:
template<typename CharType, typename CharTraits>
std::basic_ostream<CharType, CharTraits>&
operator<<(std::basic_ostream<CharType, CharTraits>& o, const AnyString<CharType, CharTraits>& str)
{
using size_type = AnyString<CharType, CharTraits>::size_type;
for (size_type i = 0u; i < str.size(); ++i)
{
o << str[i];
}
return o;
}
Затем я попытался использовать его следующим образом:
cout << str;
но проблема заключалась в следующем: «ни один оператор<< не соответствует этим операндам». Причина в том, что std::cout используетstd::char_traits<char>
но нетCharTraits<char, int>
что я разработал.
Решил создать свою версию:
using Ostream = std::basic_ostream<char, CharTraits<char, int> >;
Ostream Cout;
Но он не компилируется по этой причине:
std::basic_ostream<char,CharTraits<char,int>>': нет подходящего конструктора по умолчанию
Мне нужно понять, как лучше всего инициализировать мою версиюstd::cout
.