定义运算符<<课堂内
考虑以下代码:
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
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你
在班级里面。它是
MyClass
类的一个方法。非静态方法有一个名为this
指针的隐式参数。this
指针是指向调用该方法的对象的指针。您不需要MyClassReference
参数,因为this
指针可以满足该目的。将该方法声明更改为
.
You have
inside of the class. It is a method of the class
MyClass
. Non-static methods have an implicit parameter called thethis
pointer. Thethis
pointer is a pointer to the object the method was called on. You do not need theMyClassReference
parameter because thethis
pointer fulfills that purpose.Change that method declaration to
.
我不确定这是个好主意,但是是的 - 当您将
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.你就快到了:
You were almost there: