Я некоторое время писал реализацию для работы с SQLite3. Всё почти написал. Осталось дописать пару обёрток для выполнения команд в удобном виде. Вот возник вопрос по этому поводу. Есть такой вот код:
Оно работает всё замечательно. Но как видно, здесь функция заточена под канкретную таблицу с канкретными колонками и её типами соответственно. А это есс-но не вариант. Ведь нужен минималистический фреймоврк для работы с любыми таблицами и любыми типами.
В Java я сделал бы всё просто. Передал бы в функцию массив объектов, а внутри получил бы тип каждого члена посредством рефлексии. Всё элементарно. В Mql я хз как поступить. Уже пару часов думаю. Придумал какие-то грабли. Запросы выкидывать за пределы метода тоже не вариант. Нарушится инкапсуляция. Какие могут быть вообще здесь варианты?
Я выделил жёлтым цветов то, что будут заменят. Вопросики вообще элементарно.. Их будет ровно столько, сколько передаётся членов массива.
Т.е. мне нужно передать все эти выделенные аргументы в эту функцию массивом, т.к. заранее типы и количество аргументов не известно. Как это сделать в Mql?
Массив объектов CArrayObj
Я думал об этом. Смотрю https://www.mql5.com/ru/docs/standardlibrary/cobject
Как объекту присвоить значение какого-то типа. В справке ни слова. В Java это делается интуитивно при помощи конструкторов. Например, String() имеет много конструкторов под разные варианты. Тоже самое для Double() и Interger(), например.
В Mql таких вариантов нет. Из объектов только лишь CObject. Но как в него поместить строку или число нет ничего в справке?
- www.mql5.com
Я думал об этом. Смотрю https://www.mql5.com/ru/docs/standardlibrary/cobject
Как объекту присвоить значение какого-то типа. В справке ни слова. В Java это делается интуитивно при помощи конструкторов. Например, String() имеет много конструкторов под разные варианты. Тоже самое для Double() и Interger(), например.
В Mql таких вариантов нет. Из объектов только лишь CObject. Но как в него поместить строку или число нет ничего в справке?
Создаёте нужное количество объектов с необходимыми вам полями. Каждый объект должен быть унаследован от CObject. И потом их можно уже помещать в CArrayObj
Это понятно. Вопрос в том, как в объект добавить как Вы выразились поле..
Я же внятно выразился. В классе CObject нет методов добавления с его экземпляр значения какого-либо типа. А типовые есть только массивы, т.е. CArray* (CArrayString, CArrayDouble, CArrayInt и т.д.). Но это массивы, мне они не нужны. Хотя у них и только у них есть возможность добавления поля внутрь. А объектов единичных (не массивов объектов) типа C* (CArrayString, CArrayDouble, CArrayInt и т.д.) нет в Mql. Поэтому и вопрос.
Можно, конечно, насоздавать массивов определённого типа, позапихать в них поля, а потом члены этих массивов объектов запихать в массив объектов CArrayObj, но это дичъ полнейшая. Вместо одной строки выйдет целый метод. Так писать как-бы не адекватно. Тогда проще sql-инструкцию вынести из метода, а не выдумывать какие-то костыли. Поэтому и вопрос, как это сделать компакто и красиво.
Это понятно. Вопрос в том, как в объект добавить как Вы выразились поле..
void foo() { CArrayLong array_long; array_long.Add(12345); CArrayString array_string; array_string.Add("test"); }
Vasiliy Sokolov, Вы меня не поняли. Мне нужно передать посредством одного массива все параметры. А то, что Вы написали, я и сам использовал.
Вот я накидал:
CArrayObj *obj = new CArrayObj; // obj.Add(new CArrayInt().Add(5)); CArrayInt *intArray = new CArrayInt; intArray.Add(5); obj.AssignArray(intArray); // Здесь ошибка
Хотя, intArray это массив объектов типа int. С чего бы-то вдруг не возможно было в массив объектов его запихнуть вопрос.
Т.е. мне нужно в массив CObject запихать элементы разных типов, как я уже писал выше. А плодить пачку разных массивов не вариант. Потом хз как дальше ими оперировать в другом методе, если не известно заранее количество и типы членов массивов..
Это несложно сделать.
Надо просто прекратить называть Ваши пробелы в знаниях MQL-костылями и начать учиться.
Это несложно сделать.
Надо просто прекратить называть Ваши пробелы в знаниях MQL-костылями и начать учиться.
Я же привёл пример как это обычно делается в любых современных языках. Если здесь можно что-то пободное реализовать я буду рад услышать. Правда, на данный момент я вижу, что подобных вариантов здесь нет.
Я повторюсь, если это возможно, я буду рад услышать..
Я же привёл пример как это обычно делается в любых современных языках. Если здесь можно что-то пободное реализовать я буду рад услышать. Правда, на данный момент я вижу, что подобных вариантов здесь нет.
Я повторюсь, если это возможно, я буду рад услышать..
Что, какие поля должен содержать ваш объект?
Объект должен быть унаследован от CObject.
Вы должны иметь несколько объектов, унаследованных от CObject. Каждый объект может содержать любое количество нужных ему полей. И, если все они наследуют свойства CObject, то только тогда их можно все собрать в одном CArrayObj.
Я просто не понимаю, и не знаю вообще, что именно должен хранить каждый из ваших объектов.
Распишите их. Тогда можно придумать нормальную компоновку их массива. Вполне может оказаться, что достаточно иметь один объект с множеством полей, подходящих для разных случаев, а может стоит создать множество объектов CObject, каждый из которых будет применим для своего случая, и различать их можно будет по их типу, который будет им каждому вами присвоен.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я некоторое время писал реализацию для работы с SQLite3. Всё почти написал. Осталось дописать пару обёрток для выполнения команд в удобном виде. Вот возник вопрос по этому поводу. Есть такой вот код:
Оно работает всё замечательно. Но как видно, здесь функция заточена под канкретную таблицу с канкретными колонками и её типами соответственно. А это есс-но не вариант. Ведь нужен минималистический фреймоврк для работы с любыми таблицами и любыми типами.
В Java я сделал бы всё просто. Передал бы в функцию массив объектов, а внутри получил бы тип каждого члена посредством рефлексии. Всё элементарно. В Mql я хз как поступить. Уже пару часов думаю. Придумал какие-то грабли. Запросы выкидывать за пределы метода тоже не вариант. Нарушится инкапсуляция. Какие могут быть вообще здесь варианты?
Я выделил жёлтым цветов то, что будут заменят. Вопросики вообще элементарно.. Их будет ровно столько, сколько передаётся членов массива.
Т.е. мне нужно передать все эти выделенные аргументы в эту функцию массивом, т.к. заранее типы и количество аргументов не известно. Как это сделать в Mql? Обычный массив не катит т.к. у него тип канкретный, а нужно передавать аргументы разных типов (string, double, int..)