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)
    {
        // ...
    }
};

上面的代码会产生编译错误,因为它接受两个参数。删除MyClassReference参数修复了错误,但我有依赖于该参数的代码。只是MyClassReference相当于*this

4

3 回答 3

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 回答
1

我不确定这是个好主意,但是是的——当您定义operator<<为成员函数时,*this基本上等同于您在运算符中定义的第一个参数。

于 2011-03-03T03:18:21.537 回答
0

你几乎在那里:

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