Как перегрузить оператор << только для cout?

std::ostream& operator<< (ostream& s,const Books &book){

    return  
    (...); 
}

Как мне перегрузить только для cout? Я так же записываю данные в файл

void FileTXT::writeTXT(const Item& Item)
{
    ofstream myfile;
    std::string fileName = "../Item.txt";
    try
    {
        myfile.open(fileName, fstream::in | fstream::out | fstream::app);
        printf("File has been opened!\n");
        myfile << Item;
    }
    catch(const std::ofstream::failure& e)
    {
        std::cerr << e.code() << '\n';
    }
    myfile.close();
}

Но у меня загружается не объект класса, а результат после перегрузки


Ответы (1 шт):

Автор решения: AR Hovsepyan

Проверить идентичность буфера потока с буфером std::cout :

//только для cout
std::ostream& operator<< (std::ostream& s, const Books& book) {
    std::streambuf* buf = s.rdbuf();
    if (buf == cout.rdbuf())
        s << book._mem//...;
    else
        //можете генерировать исключение
        //но это не всегда хорошо
        std::cerr << "\n    error\n";
    return s;
}

После этого можете вводить только в консоль:

myfile << Books(); //error
cout << Books(); //правильно
→ Ссылка