Это правильно:
class My_class { public: void Function1(double &dd[],int &ii[],bool &bb[]); void Function2(double &dd[],int &ii[],bool &bb[]); void Function3(double &dd[],int &ii[],bool &bb[]); void Function4(double &dd[],int &ii[],bool &bb[]); void Function5(double &dd[],int &ii[],bool &bb[]); void Function6(double &dd[],int &ii[],bool &bb[]); };
А хочется так, но не правильно:
class My_class { private: double d_s[]; int i_s[]; bool b_s[]; public: void Init(double &dd[],int &ii[],bool &bb[]) { d_s=dd;//Тут ошибка i_s=ii;//Тут ошибка b_s=bb;//Тут ошибка }; void Function1(); void Function2(); void Function3(); void Function4(); void Function5(); void Function6(); };
Это красиво, но медленно(массивы большие, инициализация может быть частая):
class My_class { private: double d_s[]; int i_s[]; bool b_s[]; public: void Init(double &dd[],int &ii[],bool &bb[]) { ArrayCopy(d_s,dd); ArrayCopy(i_s,ii); ArrayCopy(b_s,bb); }; void Function1(); void Function2(); void Function3(); void Function4(); void Function5(); void Function6(); };Ужасно...
Надо просить разработчиков, чтобы сделали возможность инициализации в этом случае:
struct Sii { int i[];//Динамический массив double d1; }; Sii ii[]={{{2,3,4},9.3},{{9,10,11,12,15},0.4}};
Потому как если отдельно динамический массив способен инициализироваться значениями, значит и в структуре должно быть так же.
В итоге получается: "не хочу использовать ArrayCopy(), хочу использовать =". Кто сказал что = (если бы было), работало бы быстрее, чем ArrayCopy)?
Надо просить разработчиков, чтобы сделали возможность инициализации в этом случае:
Потому как если отдельно динамический массив способен инициализироваться значениями, значит и в структуре должно быть так же.
согласен.
Это было бы логичнее.
Интересно в C++ так работает?
ЗЫ Попробовал с C++.
С++ вообще не разрешает использовать динамические массивы в структурах.
Так что mql более гибкий в этом отношении.
С++ вообще не разрешает использовать динамические массивы в структурах.
эээ в смысле?
согласен.
Это было бы логичнее.
Интересно в C++ так работает?
ЗЫ Попробовал с C++.
С++ вообще не разрешает использовать динамические массивы в структурах.
Так что mql более гибкий в этом отношении.
#include "pch.h" #include <iostream> struct MyStruct { int a[]; }; int main() { MyStruct test = {1,2,3,4,6}; for (int i = 0; i < 5; i++) std::cout << test.a[i] << '\n'; return 0; }
1
2
3
4
6
C:\Users\Симаков\source\repos\Lerning\Debug\Lerning.exe (процесс 9004) завершает
работу с кодом 0.
Чтобы автоматически закрывать консоль при остановке отладки, установите параметр
"Сервис" -> "Параметры" -> "Отладка" -> "Автоматически закрыть консоль при оста
новке отладки".
Чтобы закрыть это окно, нажмите любую клавишу:
С++ не дает менять размер массива.
Так и mql4/5, учитывая, что папа/мама у них С++/С# скорее всего просто создает новый и копирует туда данные из старого.
В итоге получается: "не хочу использовать ArrayCopy(), хочу использовать =". Кто сказал что = (если бы было), работало бы быстрее, чем ArrayCopy)?
Под "=" подразумевается просто копирование указателя/ссылки на массив. Поэтому и быстрее, значительно.
А почему нельзя сделать нужный конструктор к структуре с переменным количеством параметров? Или же можно создать сам массив и передать его ссылкой в конструктор.
А что в конструкторе будет? Копирование массивов? Получается, при оптимизации советника, каждый раз будет происходить копирование больших массивов.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Это удобно, но памяти много ест:
Красиво, памяти много не ест, но неправильно :( :
Не красиво, память не есть.
Ужасно...