Как инициализировать пользовательский аналог для 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.

0 ответов

Другие вопросы по тегам