Как вызвать оператор << on "this" в потомке std :: stringstream? - PullRequest
1 голос
/ 10 июня 2010
class mystream : public std::stringstream
{
public:
    void write_something()
    {
        this << "something";
    }
};

Это приводит к следующим двум ошибкам компиляции на VC ++ 10:

error C2297: '<<' : illegal, right operand has type 'const char [10]'
error C2296: '<<' : illegal, left operand has type 'mystream *const '

Судя по второму, это потому, что то, на что указывает this, изменить нельзя, но оператор << делает (или, по крайней мере, объявляет так, как если бы он это делал). Правильно? </strike>

Есть ли какой-нибудь другой способ использовать операторы << и >> в this?

Ответы [ 2 ]

8 голосов
/ 10 июня 2010

mystream *const означает, что this является постоянным указателем на непостоянный объект. Проблема в том, что вы пытаетесь вставить поток в указатель - вы должны вставить в поток. Попробуйте следующее.

*this << "something";
1 голос
/ 10 июня 2010

Деструктор потока строк (на самом деле basic_stringstream<char>) не является виртуальным, и, как и все классы из C ++ SL, вы не должны наследовать их ...

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

...