К сожалению, напрямую, как в C++ нельзя, так как в MQL нельзя возвращать ссылку.
Есть такой вариант:
#include <Object.mqh> class CBuffer : public CObject { double buffer[]; struct ArrayCursor { private: CBuffer* mBuffer; int mIndex; public: ArrayCursor( CBuffer* buffer, int i ) : mBuffer( buffer ), mIndex( i ){} ArrayCursor( const ArrayCursor& ac ) : mBuffer( ac.mBuffer ), mIndex( ac.mIndex ){} void operator=( const double val ) { mBuffer.buffer[mIndex] = val; } }; public: CBuffer(){} ~CBuffer(){} ArrayCursor operator[]( const int i ); const double operator[]( const int i ) const; }; CBuffer::ArrayCursor CBuffer::operator[]( const int i ) { return ArrayCursor( &this, i ); } const double CBuffer::operator[]( const int i ) const { return buffer[i]; }
Минус его в том, что для чтения из массива, объект должен быть константным.
А для записи в массив он должен быть не константным.
Koldun Zloy #:
К сожалению, напрямую, как в C++ нельзя, так как в MQL нельзя возвращать ссылку.
Есть такой вариант:
Минус его в том, что для чтения из массива, объект должен быть константным.
А для записи в массив он должен быть не константным.
Компилятор ругается на эту строку:
CBuffer::ArrayCursor CBuffer::operator[]( const int i )
мне она тоже не понятна
#include <Object.mqh> class CBuffer : public CObject { struct ArrayCursor { private: CBuffer* mBuffer; int mIndex; public: ArrayCursor( CBuffer* buffer, int i ) : mBuffer( buffer ), mIndex( i ){} ArrayCursor( const ArrayCursor& ac ) : mBuffer( ac.mBuffer ), mIndex( ac.mIndex ){} void operator=( const double val ) { mBuffer.buffer[mIndex] = val; } }; public: CBuffer(){} ~CBuffer(){} double buffer[]; ArrayCursor operator[]( const int i ) { return ArrayCursor( &this, i ); } const double operator[]( const int i ) const; }; const double CBuffer::operator[]( const int i ) const { return buffer[i]; }
так компилируется без ошибок.
Спасибо!
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Класс-обертка для массива (для использования указателя на массив) реализована таким способом.
Можно ли в такой конструкции перегрузить оператор "=" для присвоения значения элементу массива через класс?