Разыменование класса с перегруженным * оператором
Я пытаюсь создать указатель на класс с перегруженным оператором *, но он возвращает другое значение. Код класса:
template<class T> class Node
{
public:
T *pointer;
T& operator*()
{
return *pointer;
}
}
Тогда этот код не работает, возвращая int вместо указателя:
Node<int>* examplePointer; //this works
Node<int> example; //creates an instance of Node<T> class
examplePointer = *example; //this doesn't work
Как сделать указатели с перегруженным * оператором?
2 ответа
Попробуй просто Node<int> example
, Это дает вам узел, и *example
позвонит ваш оператор - так он ведет себя как указатель.
Это Node<int>* example;
Значит это example
указатель на Node<int>
(да, я капитан Очевидность:)).
Если вы используете его потом с *
это означает, что вы просто разыменовываете указатель для доступа к Node<int>
, Итак, в основном у вас есть что-то вроде:
*example; // Just a pointer dereference expression type
// is something like Node<int>
**example; // something like: example->operator*();
Я не очень понимаю, какова ваша цель... Использование указателя на контейнер, как это, кажется, создает много косвенных...
И вообще, вы не можете перегрузить operator*
вне определения класса, поэтому вы не можете определить его для указателя.