MQL4에서 싱글톤 패턴을 구현할 수 있습니까? - 페이지 2

 
그러나 어떤 이유로 컴파일하는 동안 많은 오류가 있습니다. 뭐가 문제 야?

기본을 모르면 정적 클래스 필드를 제대로 생성하지도 못한다면 어떤 패턴을 이야기할 수 있을까요?

(Habré의 싱글톤에 대해서는 많은 기사가 있으며 왜, 어떻게, 무엇이 잘못되었는지)

싱글톤(Singleton) 또는 정적 클래스?
싱글톤 패턴 사용
 
ALXIMIKS :

(Habré의 싱글톤에 대해서는 많은 기사가 있으며 왜, 어떻게, 무엇이 잘못되었는지)

싱글톤(Singleton) 또는 정적 클래스?
싱글톤 패턴 사용

내가 못본거 같은데? 나는 그것이 어떻게 작동하는지 잘 이해하지 못했습니다. 그게 바로 문제 야. 그러나 나는 도중에 싱글 톤이 필요하지 않습니다. 그래서 정적 멤버로 관리합니다.

알시믹스 :

기본을 모르면 정적 클래스 필드를 제대로 생성하지도 못한다면 어떤 패턴을 이야기할 수 있을까요?

방법을 알면 고칠 수 있습니다. 나는 문서에 따라 어제 썼습니다. 하지만 실수도 많다. 이와 같이:

 struct Symbol_Properties
{
   static datetime     gdt_Quote;           // Время поступления последней котировки
   static double       gda_Price [ 2 ];       // Текущие рыночные цены (0 - Bid, 1- Ask)
   static double       gd_Spread;           // Размер спреда в пунктах
   static double       gd_Swap;             // Своп
   static double       gd_Comission;         // Комиссия
   static double       gd_Pt;               // Величина одного пункта
   static int          gi_Digits;           // Количество знаков в цене после запятой
   static int          gi_StopLevel;         // Минимально-допустимый уровень стоп-лосса/тейк-профита в пунктах
   static int          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 ;

무엇 향후 계획?

 
static double        gd_Spread; 
 int Symbol_Properties::gd_Spread = 0 ;
아무것도 슬프지 않아?
 
Естественно, создавать несколько объектов в разных классах данных структур крайне не рекомендуется.
왜이 모든 것을 말해? 그리고 위의 인용문을 더 명확하게 번역하십시오. 아아, 나는 아무것도 이해하지 못했습니다. 감사합니다.
 

나는 그것을 버리지 않았다. 일반적으로 현재 버전은 다음과 같습니다.

 struct Symbol_Properties
{
   static datetime     gdt_Quote;           // Время поступления последней котировки
   static double       gda_Price [ 2 ];       // Текущие рыночные цены (0 - Bid, 1- Ask)
   static double       gd_Spread;           // Размер спреда в пунктах
   static double       gd_Swap;             // Своп
   static double       gd_Comission;         // Комиссия
   static double       gd_Pt;               // Величина одного пункта
   static int          gi_Digits;           // Количество знаков в цене после запятой
   static int          gi_StopLevel;         // Минимально-допустимый уровень стоп-лосса/тейк-профита в пунктах
   static int          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 ;

그런 다음 해당 정적 변수에 대해 주어진 변수를 참조하는 코드에서, 맞습니까?

 
hoz :

글쎄, 네, .. 가장 중요한 것은 Vadim 이 알고 있다는 것입니다 :)))))

예, 다음과 같은 일반적인 대화:

Q: 여기 친구들이 사탕을 권했어요. 그게 내가 필요한거야!

나: (당황...사탕이 무슨 상관이야? V가 친구에게 DR에 가거나 아이들을 치료하고 싶어하거나 자신이나 다른 사람을 치료하고 싶어? 아마도 그는 사업을 시작하여 지금 과자를 팔고있을 것입니다. ? 이게 벨로루시에서 마지막 사탕이 되었고 지금은 V 독점이 아닐까? B가 과자를 그리워한다면?... "과자는 왜, 무엇으로 할까?"라는 주제에 대해 다른 많은 생각이 내 머릿속을 스쳐지나갔다. B와의 의사 소통, 내 텔레파시 능력이 실패했습니다. 머리에 아무것도 오지 않았습니다.)

몰라요.

만약을 위해. 대화에 참여하는 모든 사람의 동의 없이 대화를 배치하는 것은 음란합니다. 이것은 비열합니다.
 

1. 이 모든 것이 무엇을 위한 것입니까?

2. 클래스의 정적 필드에 액세스하는 방법에는 두 가지가 있습니다(구조는 기본적으로 공개 액세스가 가능한 클래스이며 상속될 때).

a) 클래스 네임스페이스를 통해 - 예를 들어 Symbol_Properties::gd_Spread

( double Spread = Symbol_Properties::gd_Spread) - Spread Symbol_Properties 클래스 gd_Spread와 같아집니다.

(double Spread = Symbol_Properties::gd_Spread = 0 ) Symbol_Properties 클래스의 gd_Spread Spread이 0이

b) 클래스 개체 (예 : Symbol_Properties obj; ) 를 만들고 이 개체를 통해 일반 클래스 필드처럼 액세스합니다.

(이중 스프레드 = obj.gd_Spread)

( 이중 스프레드 = obj.gd_Spread = 0)

 
ALXIMIKS :

1. 이 모든 것이 무엇을 위한 것입니까?

편의성 ... 결국 이러한 변수가 단일 인스턴스에서 사용되는 경우 객체를 만들어야 하는 이유는 무엇입니까? 또한 변수를 참조할 때 OBJECT NAME.VARIABLE NAME인 경우 코드를 읽는 것이 훨씬 편리합니다.

알시믹스 :

2. 클래스의 정적 필드에 액세스하는 방법에는 두 가지가 있습니다(구조는 기본적으로 공개 액세스가 가능한 클래스이며 상속될 때).

a) 클래스 네임스페이스를 통해 - 예를 들어 Symbol_Properties::gd_Spread

( double Spread = Symbol_Properties::gd_Spread) - Spread Symbol_Properties 클래스 gd_Spread와 같아집니다.

(double Spread = Symbol_Properties::gd_Spread = 0 ) Symbol_Properties 클래스의 gd_Spread Spread이 0이

그게 다야! 그래서 내가 한거야. 이 구조체의 변수를 참조하는 변수를 즉시 0으로 초기화한 다음 영구적으로 메모리에 저장합니다. 논리적이기 때문에 이러한 변수는 단일 인스턴스에서 필요합니다. 따라서 이 경우에는 다른 객체를 생성할 이유가 없습니다. 결국, 그것은 논리적입니다 .. 나와 동의하지 않습니까?

알시믹스 :

b) 클래스 개체(예 : Symbol_Properties obj; ) 를 만들고 이 개체를 통해 일반 클래스 필드처럼 액세스합니다.

그러면 변수는 정적이 아니며 프로그램이 실행되는 동안 값이 유지되지 않는다는 보장도 없습니다.
 
그리고 당신에게 단순한 정적 변수 가 기뻐하지 않는 것보다 ??? 예를 들어 잘 또는 상수???
 

단순 정적 변수(Simply STATIC VARIABLES ) 그들은 다양한 클래스에서 사용됩니다. 그래서 나는 그들을 일종의 그룹화했습니다.

그리고 상수는 기쁘게하지 않았습니다. 상수는 값을 변경하지 않으며 이러한 변수는 값을 변경할 수 있어야 합니다.