2

文字列やintのようstd::ostringstreamに、演算子を使用してに渡すことができるようにしたい複雑なオブジェクトがあります。<<ostringstreamにオブジェクトの一意のID(int)および/または名前(string)を指定したいと思います。これを機能させるためにクラスに実装できる演算子またはメソッドはありますか?

4

1 に答える 1

4

クラスと同じ名前空間で演算子のオーバーロードを定義します。

template<typename charT, typename traits>
std::basic_ostream<charT, traits> &
operator<< (std::basic_ostream<charT, traits> &lhs, Your_class const &rhs) {
    return lhs << rhs.id() << ' ' << rhs.name();
}

出力関数がクラスのプライベートメンバーにアクセスする必要がある場合は、それをフレンド関数として定義できます。

class Your_class {
    int id;
    string name;

    template<typename charT, typename traits>
    friend std::basic_ostream<charT, traits> &
    operator<< (std::basic_ostream<charT, traits> &lhs, Your_class const &rhs) {
        return lhs << rhs.id << ' ' << rhs.name;
    }
};

これはメンバー関数にはならないことに注意してください。これは、フレンド関数を一度に宣言して定義するための便利な方法にすぎません。

于 2012-06-05T23:29:49.740 に答える