0

次のコードを検討してください。

class MyClass
{
    template <typename Datatype>
    friend MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData);
    // ...
};

template <typename Datatype>
MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData)
{
    // ...
}

フレンド関数としてではなく、クラスoperator<< でどのように定義できますか?このようなもの:

class MyClass
{
    // ...

    public:

    template <typename Datatype>
    MyCLass& operator<<(MyClass& MyClassReference, Datatype SomeData)
    {
        // ...
    }
};

上記のコードは2つの引数を受け入れるため、コンパイルエラーが発生します。引数を削除するMyClassReferenceとエラーは修正されますが、その引数に依存するコードがあります。MyClassReferenceと同等です*thisか?

4

3 に答える 3

1

これが良い考えかどうかはわかりませんが、そうですoperator<<。メンバー関数として定義すると、*this基本的に、演算子で定義した最初のパラメーターと同等になります。

于 2011-03-03T03:18:21.537 に答える
1

あなたが持っている

template <typename Datatype> MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData);

クラスの中。クラスのメソッドですMyClass。非静的メソッドには、thisポインターと呼ばれる暗黙のパラメーターがあります。thisポインタは、メソッドが呼び出されたオブジェクトへのポインタです。ポインターはその目的を果たすMyClassReferenceため、パラメーターは必要ありません。this

そのメソッド宣言を次のように変更します

template <typename Datatype> MyClass& operator<<(Datatype SomeData);

于 2011-03-03T03:17:38.220 に答える
0

あなたはほとんどそこにいました:

class MyClass
{
    template <typename Datatype>
    friend MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData) 
    {
        // ...
    }
};
于 2017-09-08T07:43:22.223 に答える