定义运算符<<课堂内

发布于 2024-10-20 07:51:34 字数 769 浏览 2 评论 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

Consider the following code:

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

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

How can I define operator<< inside the class, rather than as a friend function? Something like this:

class MyClass
{
    // ...

    public:

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

The above code produces compilation errors because it accepts two arguments. Removing the MyClassReference argument fixes the errors, but I have code that relies on that argument. Is MyClassReference just the equivalent of *this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

要走就滚别墨迹 2024-10-27 07:51:34

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

在班级里面。它是MyClass类的一个方法。非静态方法有一个名为 this 指针的隐式参数。 this 指针是指向调用该方法的对象的指针。您不需要 MyClassReference 参数,因为 this 指针可以满足该目的。

将该方法声明更改为

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

.

You have

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

inside of the class. It is a method of the class MyClass. Non-static methods have an implicit parameter called the this pointer. The this pointer is a pointer to the object the method was called on. You do not need the MyClassReference parameter because the this pointer fulfills that purpose.

Change that method declaration to

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

.

耶耶耶 2024-10-27 07:51:34

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

I'm not sure this is good idea, but yes -- when you define operator<< as a member function, *this will essentially equivalent to the first parameter you've defined in your operator.

冬天旳寂寞 2024-10-27 07:51:34

你就快到了:

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

You were almost there:

class MyClass
{
    template <typename Datatype>
    friend MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData) 
    {
        // ...
    }
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文