Я читал об указателе "this" на различных сайтах (например, в руководствах MSDN) и понимаю его основное использование - возвращение копии вашего собственного объекта или использование его указателя для возврата / сравнения.
Но я сталкивался с этим утверждением:
// Return an object that defines its own operator[] that will access the data.
// The temp object is very trivial and just allows access to the data via
// operator[]
VectorDeque2D_Inner_Set<T> operator[](unsigned int first_index) {
return VectorDeque2D_Inner_Set<T>(*this, first_index);
}
Что это делает?Увеличивает ли он каким-либо образом оператор this, и если да, то почему ??
(Это происходит из примера, который я привел при переполнении стека, поэтому в синтаксисе могут быть ошибки. Дайте мне знать, если больший кусокнеобходимо, я могу вставить больше кода.)
РЕДАКТИРОВАТЬ 1
Вот весь список, для получения дополнительной информации.Функция находится в нижней части класса.Примечание. Я переименовал переменную из x в index и переименовал шаблонный внутренний класс.Я забыл поместить типовое преобразование в шаблонный внутренний класс, который я добавил в этом обновлении.
Есть идеи сейчас?
template <typename T>
class Container
{
private:
// ...
public:
// Proxy object used to provide the second brackets
template <typename T>
class OperatorBracketHelper
{
Container<T> & parent;
size_t firstIndex;
public:
OperatorBracketHelper(Container<T> & Parent, size_t FirstIndex) : parent(Parent), firstIndex(FirstIndex) {}
// This is the method called for the "second brackets"
T & operator[](size_t SecondIndex)
{
// Call the parent GetElement method which will actually retrieve the element
return parent.GetElement(firstIndex, SecondIndex);
}
}
// This is the method called for the "first brackets"
OperatorBracketHelper<T> operator[](size_t FirstIndex)
{
// Return a proxy object that "knows" to which container it has to ask the element
// and which is the first index (specified in this call)
return OperatorBracketHelper<T>(*this, FirstIndex);
}
T & GetElement(size_t FirstIndex, size_t SecondIndex)
{
// Here the actual element retrieval is done
// ...
}
}