Перегрузка оператора<< для печати в качестве члена

Есть ли способ перегрузить оператор <<, как член класса, для печати значений в виде текстового потока. Например:

class TestClass {
public:
    ostream& operator<<(ostream& os) {
        return os << "I'm in the class, msg=" << msg << endl;
    }

private:
    string msg;
};


int main(int argc, char** argv) {
    TestClass obj = TestClass();
    cout << obj;

    return 0;
}

Единственный способ, который я смог придумать, это перегрузить оператор вне класса:

ostream& operator<<(ostream& os, TestClass& obj) {
    return os << "I'm outside of the class and can't access msg" << endl;
}

Но тогда единственным способом получить доступ к приватным частям объекта будет подружиться с функцией оператора, а я бы предпочел избежать друзей, если это возможно, и поэтому прошу вас предложить альтернативные решения.

Любые комментарии или рекомендации о том, как действовать дальше, будут полезны :)

8
задан ChewToy 12 December 2011 в 14:36
поделиться