Определение оператора << Внутри класса
Рассмотрим следующий код:
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
?
3 ответа
У тебя есть
template <typename Datatype> MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData);
внутри класса. Это метод класса MyClass
, Нестатические методы имеют неявный параметр, называемый this
указатель. this
Указатель - это указатель на объект, для которого был вызван метод. Вам не нужно MyClassReference
параметр, потому что this
Указатель выполняет эту цель.
Измените объявление этого метода на
template <typename Datatype> MyClass& operator<<(Datatype SomeData);
,
Я не уверен, что это хорошая идея, но да - когда вы определяете operator<<
как функция-член, *this
будет по существу эквивалентен первому параметру, который вы определили в вашем операторе.
Вы были почти там
class MyClass
{
template <typename Datatype>
friend MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData)
{
// ...
}
};