Форум » Консультации по программированию » Массив структур параметров позиции » Ответить

Массив структур параметров позиции

hoz: Если имеется структура параметров позиций, массив структур данного типа нужно создавать не статический? Я просто не представляю даже, советники если будут различные использовать данную структуру: struct PosProp { int gi_Type; // Тип торговой операции int gi_CurTicket; // Тикет выбранного ордера double gd_OpenPrice; // Цена открытия double gd_Lots; // Объём позиции на открытие double gd_CurSL; // Текущий Stop Loss выбранной позиции double gd_CurTP; // Текущий Take Profit выбранной позиции string gs_Comment; // Комментарий }; PosProp SPos[]; Они будут использовать свою копию массива структуры или нет будучи она статическая ? Надеюсь я понятно написал. Ведь можно было и так создать PosProp SPos[];

Ответов - 1

Scriptong: На мой взгляд, Вы ищите сложности там, где их нет. Дело в том, что способов решения одной и той же проблемы существует множество, особенно в программировании. Причем из всех этих способов достаточно трудно выбрать единственно верный. Поэтому на этапе разработки программист выбирает тот путь, который удобнее именно ему в данной конкретной архитектуре программы. К примеру, если очень нужно работать со списком ордеров в разных классах, то создавать этот список все равно нужно только в одном классе, а всем остальным передавать его по константной ссылке. Или же можно создать в классе метод, который будет копировать список в массив, переданный по ссылке: struct PosProp { int gi_Type; // Тип торговой операции int gi_CurTicket; // Тикет выбранного ордера double gd_OpenPrice; // Цена открытия double gd_Lots; // Объём позиции на открытие double gd_CurSL; // Текущий Stop Loss выбранной позиции double gd_CurTP; // Текущий Take Profit выбранной позиции string gs_Comment; // Комментарий void operator = (const PosProp &orderInfo) { gi_Type = orderInfo.gi_Type; gi_CurTicket = orderInfo.gi_CurTicket; gd_OpenPrice = orderInfo.gd_OpenPrice; gd_Lots = orderInfo.gd_Lots; gd_CurSL = orderInfo.gd_Lots; gd_CurTP = orderInfo.gd_CurTP; gs_Comment = orderInfo.gs_Comment; } }; class OrdersList { PosProp m_ordersList[]; public: OrdersList(void); ~OrdersList(void); void GetOrdersList(PosProp &ordersList[]); }; OrdersList::OrdersList(void) { } void OrdersList::GetOrdersList(PosProp &ordersList[]) { int ordersCnt = ArraySize(m_ordersList); ArrayResize(ordersList, ordersCnt); // Здесь не забыть проверку на успешность перераспределения памяти for (int i = 0; i < ordersCnt; i++) ordersList[ i ] = m_ordersList[ i ]; } В своих программах свожу логику так, чтобы список ордеров не приходилось передавать другим классам. То есть только один класс является ответственным за работу с ордерами. Все остальные классы являются вспомогательными. На основе данных вспомогательных классов класс, работающий с ордерами, принимает решения о выполнении той или иной торговой операции.



полная версия страницы