请考虑以下代码:
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
吗?
答案 0 :(得分:1)
你有
template <typename Datatype> MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData);
在课堂内。它是类MyClass
的一种方法。非静态方法有一个名为this
指针的隐式参数。 this
指针是指向调用该方法的对象的指针。您不需要MyClassReference
参数,因为this
指针符合此目的。
将该方法声明更改为
template <typename Datatype> MyClass& operator<<(Datatype SomeData);
答案 1 :(得分:1)
我不确定这是个好主意,但是 - 当您将operator<<
定义为成员函数时,*this
基本上等同于您在运算符中定义的第一个参数。
答案 2 :(得分:0)
你快到了那里:
class MyClass
{
template <typename Datatype>
friend MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData)
{
// ...
}
};