Думаете я это не встречал? Я не совсем понял, как это работает. Вот в чём дело. Но по ходу мне синглтон не нужен. Так что обойдусь статическими членами.
ALXIMIKS:
О каких патернах может идти речь если вы не знаете основ, даже правильно создать статическое поле класса не смогли.
Если знаешь как, то поправил бы. Я вчера писал согласно документации. Но тоже ошибок море. Вот так:
struct Symbol_Properties
{
staticdatetime gdt_Quote; // Время поступления последней котировкиstaticdouble gda_Price [2]; // Текущие рыночные цены (0 - Bid, 1- Ask)staticdouble gd_Spread; // Размер спреда в пунктахstaticdouble gd_Swap; // Свопstaticdouble gd_Comission; // Комиссияstaticdouble gd_Pt; // Величина одного пунктаstaticint gi_Digits; // Количество знаков в цене после запятойstaticint gi_StopLevel; // Минимально-допустимый уровень стоп-лосса/тейк-профита в пунктахstaticint gi_FreezLevel; // Уровень заморозки ордеров в пунктах
};
int Symbol_Properties::gdt_Quote = 0;
int Symbol_Properties::gda_Price = 0;
int Symbol_Properties::gd_Spread = 0;
int Symbol_Properties::gd_Swap = 0;
int Symbol_Properties::gd_Comission = 0;
int Symbol_Properties::gd_Pt = 0;
int Symbol_Properties::gi_Digits = 0;
int Symbol_Properties::gi_StopLevel = 0;
int Symbol_Properties::gi_FreezLevel = 0;
Это я не то скинул. В общем текущий вариант верный вот:
struct Symbol_Properties
{
staticdatetime gdt_Quote; // Время поступления последней котировкиstaticdouble gda_Price [2]; // Текущие рыночные цены (0 - Bid, 1- Ask)staticdouble gd_Spread; // Размер спреда в пунктахstaticdouble gd_Swap; // Свопstaticdouble gd_Comission; // Комиссияstaticdouble gd_Pt; // Величина одного пунктаstaticint gi_Digits; // Количество знаков в цене после запятойstaticint gi_StopLevel; // Минимально-допустимый уровень стоп-лосса/тейк-профита в пунктахstaticint gi_FreezLevel; // Уровень заморозки ордеров в пунктах
};
datetime Symbol_Properties::gdt_Quote = 0;
double Symbol_Properties::gda_Price [2] = {0.0, 0.0};
double Symbol_Properties::gd_Spread = 0;
double Symbol_Properties::gd_Swap = 0;
double Symbol_Properties::gd_Comission = 0;
double Symbol_Properties::gd_Pt = 0;
int Symbol_Properties::gi_Digits = 0;
int Symbol_Properties::gi_StopLevel = 0;
int Symbol_Properties::gi_FreezLevel = 0;
Я так понимаю, теперь мне к каждой статической переменной обращаться по такому длинному имени?
Symbol_Properties::gd_Spread = 0;
Или всё-таки проще это дело реализовать так, чтоб после описания структуры инициализации переменной когда происходит присваивать соответствующий статический член некой переменной типа:
double Spread = Symbol_Properties::gd_Spread = 0;
А потом в коде обращаться по данной переменной к соответствующим статически переменным, верно?
В: Мне тут друзья конфеты посоветовали. Это то, что мне нужно!
Я: (В недоумении... При чём тут конфеты? Возможно, В идёт на ДР к подруге или хочет угостить детей, может своих или чужих? Может он занялся бизнесом и теперь приторговывает конфетами? Может это были последние конфеты в Беларуссии и теперь В монополист? А вдруг В соскучился по сладкому?... Множество других мыслей пронеслось у меня в голове на тему "зачем конфеты и что с ними делать". Очередной раз, как и ранее в общении с В, мои телепатические способности подвели. Ничего в голову не приходило.)
Не в курсе.
На всякий случай. Неприлично выкладывать диалоги без согласия всех участвующих в беседе. Это подлость.
Удобство... Ведь если эти переменные используются в единственном экземпляре, то зачем мне создавать объект? К тому же обращаясь к переменной, гораздо удобнее читать код, ежели ИМЯ ОБЪЕКТА.ИМЯ ПЕРЕМЕННОЙ.
ALXIMIKS:
2. Есть два способа обращения к статическим полям класса (структура - это класс с public доступом по умолчанию и при наследовании):
а) через пространство имен класса - например Symbol_Properties::gd_Spread
(double Spread = Symbol_Properties::gd_Spread) - значение Spread становится равным gd_Spread из класса Symbol_Properties
(double Spread = Symbol_Properties::gd_Spread = 0) значение gd_Spread из класса Symbol_Properties и значение Spread становятся равными 0
Вот именно! Я потому я так и сделал. Сразу инициализирую переменную, которая ссылается на переменную данной структуры нулём и дальше она хранится в памяти постоянно. Что логично, т.к. данные переменные необходимы в единственном экземпляре. Потому нет резона создавать различные объект в данном случае. Ведь логично же.. Не согласны со мной?
ALXIMIKS:
б) создать объект класса (например Symbol_Properties obj; ) и обращаться как к обычному полю класса через данный объект
Тогда переменные не будут статичными, и нет гарантии, что они не будут сохранять свои значения в процессе работы программы.
О каких патернах может идти речь если вы не знаете основ, даже правильно создать статическое поле класса не смогли.
(про singleton на хабре куча статей и для чего, и как, и что плохого)
Singleton (Одиночка) или статический класс?Использование паттерна синглтон
(про singleton на хабре куча статей и для чего, и как, и что плохого)
Singleton (Одиночка) или статический класс?Использование паттерна синглтон
Думаете я это не встречал? Я не совсем понял, как это работает. Вот в чём дело. Но по ходу мне синглтон не нужен. Так что обойдусь статическими членами.
О каких патернах может идти речь если вы не знаете основ, даже правильно создать статическое поле класса не смогли.
Если знаешь как, то поправил бы. Я вчера писал согласно документации. Но тоже ошибок море. Вот так:
Дальше что?
Это я не то скинул. В общем текущий вариант верный вот:
Я так понимаю, теперь мне к каждой статической переменной обращаться по такому длинному имени?
Symbol_Properties::gd_Spread = 0;Или всё-таки проще это дело реализовать так, чтоб после описания структуры инициализации переменной когда происходит присваивать соответствующий статический член некой переменной типа:
А потом в коде обращаться по данной переменной к соответствующим статически переменным, верно?
Ну да,.. Главное, что Вадим в курсе :)))))
Ага, нормальный такой диалог:
В: Мне тут друзья конфеты посоветовали. Это то, что мне нужно!
Я: (В недоумении... При чём тут конфеты? Возможно, В идёт на ДР к подруге или хочет угостить детей, может своих или чужих? Может он занялся бизнесом и теперь приторговывает конфетами? Может это были последние конфеты в Беларуссии и теперь В монополист? А вдруг В соскучился по сладкому?... Множество других мыслей пронеслось у меня в голове на тему "зачем конфеты и что с ними делать". Очередной раз, как и ранее в общении с В, мои телепатические способности подвели. Ничего в голову не приходило.)
Не в курсе.
1. Для чего все это?
2. Есть два способа обращения к статическим полям класса (структура - это класс с public доступом по умолчанию и при наследовании):
а) через пространство имен класса - например Symbol_Properties::gd_Spread
(double Spread = Symbol_Properties::gd_Spread) - значение Spread становится равным gd_Spread из класса Symbol_Properties
(double Spread = Symbol_Properties::gd_Spread = 0) значение gd_Spread из класса Symbol_Properties и значение Spread становятся равными 0
б) создать объект класса (например Symbol_Properties obj; ) и обращаться как к обычному полю класса через данный объект
(double Spread = obj.gd_Spread)
( double Spread = obj.gd_Spread = 0)
1. Для чего все это?
Удобство... Ведь если эти переменные используются в единственном экземпляре, то зачем мне создавать объект? К тому же обращаясь к переменной, гораздо удобнее читать код, ежели ИМЯ ОБЪЕКТА.ИМЯ ПЕРЕМЕННОЙ.
2. Есть два способа обращения к статическим полям класса (структура - это класс с public доступом по умолчанию и при наследовании):
а) через пространство имен класса - например Symbol_Properties::gd_Spread
(double Spread = Symbol_Properties::gd_Spread) - значение Spread становится равным gd_Spread из класса Symbol_Properties
(double Spread = Symbol_Properties::gd_Spread = 0) значение gd_Spread из класса Symbol_Properties и значение Spread становятся равными 0
Вот именно! Я потому я так и сделал. Сразу инициализирую переменную, которая ссылается на переменную данной структуры нулём и дальше она хранится в памяти постоянно. Что логично, т.к. данные переменные необходимы в единственном экземпляре. Потому нет резона создавать различные объект в данном случае. Ведь логично же.. Не согласны со мной?
б) создать объект класса (например Symbol_Properties obj; ) и обращаться как к обычному полю класса через данный объект
ПРОСТО СТАТИЧЕСКИЕ ПЕРЕМЕННЫЕ не угодили, т.к. они используются в различных классах. Так я их как-бы сказать сгруппировал.
А константы не угодили т.к. константы не меняют свои значения, а эти переменные должны иметь возможность менять свои значения.