создание ostream

Я, наконец, решил проблему с местоположением, просматривая все журналы gitlab & amp; более успешно plesk / apache. Проблема заключалась в «mod_security» в Apache, который блокировал определенные типы соединений.

Результаты были: - Эта RPC 403 запрещенная ошибка - Невозможно включить, удалить ключи развертывания - (Может быть, другие проблемы, которые я не заметил)

Так что теперь все решено. Надеюсь, это поможет.

5
задан 7 February 2009 в 20:32
поделиться

4 ответа

Поскольку это для образования, как Вы говорите, я покажу Вам, как я сделал бы такую штуку. Иначе, stringstream действительно способ пойти.

Кажется, что Вы хотите создать streambuf реализацию, которая затем пишет в вектор / двухсторонняя очередь. Что-то вроде этого (копирование с другого ответа меня, который был нацелен на/dev/null поток):

template<typename Ch, typename Traits = std::char_traits<Ch>,
         typename Sequence = std::vector<Ch> >
struct basic_seqbuf : std::basic_streambuf<Ch, Traits> {
     typedef std::basic_streambuf<Ch, Traits> base_type;
     typedef typename base_type::int_type int_type;
     typedef typename base_type::traits_type traits_type;

     virtual int_type overflow(int_type ch) {
         if(traits_type::eq_int_type(ch, traits_type::eof()))
             return traits_type::eof();
         c.push_back(traits_type::to_char_type(ch));
         return ch;
     }

    Sequence const& get_sequence() const {
        return c;
    }
protected:
    Sequence c;
};

// convenient typedefs
typedef basic_seqbuf<char> seqbuf;
typedef basic_seqbuf<wchar_t> wseqbuf;

Можно использовать его как это:

seqbuf s;
std::ostream os(&s);
os << "hello, i'm " << 22 << " years old" << std::endl;
std::vector<char> v = s.get_sequence();

Если Вы хотите иметь двухстороннюю очередь как последовательность, можно сделать так:

typedef basic_seqbuf< char, char_traits<char>, std::deque<char> > dseq_buf;

Или что-то подобное... Хорошо я не протестировал его. Но возможно это - также хорошая вещь - поэтому, если она содержит все еще ошибки, можно попытаться фиксировать их.

11
ответ дан 18 December 2019 в 09:10
поделиться

Станд. использования:: stringstream

#include <iostream>
#include <sstream>
int main()
{
    std::stringstream   s;
    s << "Plop" << 5;

    std::cout << s.str();
}
4
ответ дан 18 December 2019 в 09:10
поделиться

Я просто отмечу, что Вы не должны писать подобный ostream класс для этого. Можно использовать адаптер для достижения цели.

Например, этот код читает из istream и вставляет каждый элемент в вектор:

vector<string> V;
copy(istream_iterator<string>(cin), 
     istream_iterator<string>(), 
     back_inserter(V)); 
2
ответ дан 18 December 2019 в 09:10
поделиться

Без большего количества детали о то, что Вы хотите сделать это, твердо быть слишком конкретным, но Вы не хотите создавать новый ostream. То, что Вы хотите сделать, создают новый тип streambuf и используют существующий ostream.

easyist вещь сделать состоит в том, чтобы наследоваться станд.:: basic_filebuf <>, и перегрузка синхронизация () и переполнение () методы для добавления элементов к структурам данных.

1
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: