Przeciążenie operator<<

0

Witam mam problem z następującym zagadnieniem. Próbuję przeciążyć operator<< w takim sposób by obsługiwał przykładowy zapis (<< ma przyjmować manipulator):

nazwa_obiektu<<endl;

Niestety spotykam z błędem: nie znaleziono, żadnego operatora, który przyjmuje lewostronny operand typu: "nazwa_klasy"

nazwa klasy& operator<<(ostream& o);

Czy mógłby ktoś doradzić mi jak poradzić sobie z tym problemem?

1
rolniczy napisał(a):

Witam mam problem z następującym zagadnieniem. Próbuję przeciążyć operator<< w takim sposób by obsługiwał przykładowy zapis (<< ma przyjmować manipulator):

nazwa_obiektu<<endl;

I co miałoby to zrobić?

0

Przede wszystkim: https://dsp.krzaq.cc/post/304/jak-przeladowywac-operatory-w-mojej-klasie/

Odpowiadając na twój problem XY
Poniższy kod przepuści element iostream (ale nie zrobi nic sensownego, bo nie ma sensu):


struct foo
{
    foo& operator<<(ostream&) {
        return *this;
    }
};

int main()
{
    foo f;
    f << cout;
}

std::endl jest szablonem funkcji:

struct foo
{
    foo& operator<<(basic_ostream<char>&(*func)(basic_ostream<char>&))
    {
        // func == endl
        return *this;
    }
};

int main()
{
    foo f;
    f << endl;
}

Tylko odpowiedz sobie na pytanie: co rzeczywiście chcę zrobić i zaimplementuj operator<< idiomatycznie - tj jako operację przesunięcia bitowego albo jako zapis do ostream.

0
ostream &tab(ostream &s) { return s<<'\t'; }

int main()
{
    cout<<"ColA"<<tab<<"ColB"<<endl;
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1