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

 
sergeev :

이게 뭔가요??

이것은 당신이 요청한 것입니다. 클래스 인스턴스.. extern 수정자를 사용합니다. 물론 터무니없다. 하지만..

여기 당신이 그것에 대해 이야기하고 있습니다. 나는 이것에 대한 필요성을 정말로 찾지 못했습니다.

세르게예프 :

그리고 extern을 운명이 아닌 것으로 만드는 구조의 인스턴스?

나는 extern이 그것과 무슨 관련이 있는지 이해하지 못합니까? 다른 클래스에 포함될 수 있도록 일부 데이터를 "공개"할 필요가 없습니다. 또한 이러한 변수는 프로그램 실행 중에 값을 잃지 않아야 합니다. 정적이다. 당신은 extern에 대해 말해. 무엇 때문에?

 
hoz :

이것은 당신이 요청한 것입니다. 클래스 인스턴스.. extern 수정자를 사용합니다. 물론 터무니없다. 하지만..

아예 컴파일하셨나요?


공유할 데이터를 "만들" 필요가 없습니다.
당신은 어떻게 필요합니까?
 
sergeev :

아예 컴파일하셨나요?

나는 확인하지 않았다. 왜냐하면 필요한 것은 아직 구현되지 않았습니다.

세르게예프 :

당신은 어떻게 필요합니까?

내가 필요한 것을 반복합니다 ... 프로그램 실행 중에 멤버가 값을 유지해야 하는 구조가 있지만 이 구조를 사용하는 클래스의 메서드가 호출되면 멤버를 수정할 수 있습니다. 나는 그들이 정적이어야한다는 것을 이해합니다. 이러한 구성원은 단일 사본에 있어야 합니다. 이 구조의 멤버는 많은 클래스와 EA 자체에서 사용됩니다.

다음과 같았습니다.

 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;       // Уровень заморозки ордеров в пунктах
};

Symbol_Properties::gdt_Quote = 0 ;
Symbol_Properties::gda_Price [ 2 ] = { 0.0 , 0.0 };
Symbol_Properties::gd_Spread = 0 ;
Symbol_Properties::gd_Swap = 0 ;
Symbol_Properties::gd_Comission = 0 ;
Symbol_Properties::gd_Pt = 0 ;
Symbol_Properties::gi_Digits = 0 ;
Symbol_Properties::gi_StopLevel = 0 ;
Symbol_Properties::gi_FreezLevel = 0 ;

그러나 이 경우 이러한 변수에 액세스하는 것은 불편합니다. "이름"이 깁니다. 저것들:

Symbol_Properties::gd_Pt = 0 ;

그것을 구현하는 방법?

 
hoz :

필요한 것을 반복합니다 ... 프로그램 실행 중에 멤버가 값을 유지해야 하는 구조가 있지만 이 구조를 사용하는 클래스의 메서드가 호출되면 멤버를 수정할 수 있습니다. 나는 그들이 정적이어야한다는 것을 이해합니다. 이러한 구성원은 단일 사본에 있어야 합니다. 이 구조의 멤버는 많은 클래스와 EA 자체에서 사용됩니다.

생성된 유일한 변수에 액세스하는 데 어떤 문제가 있습니까?

 

그리고 STRUCTURE NAME.MEMBER NAME으로 그들을 참조합니까?

그러나 이 변수가 프로그램을 실행하는 동안 현재 값을 잃지 않는다는 보장이 있습니까?

 
hoz :

그리고 STRUCTURE NAME.MEMBER NAME으로 그들을 참조합니까?

변수 이름.멤버 이름.


그러나 이 변수가 프로그램을 실행하는 동안 현재 값을 잃지 않는다는 보장이 있습니까?

어 쉿 o_o?

Expert Advisor에 다중 스레드 실행이 있습니까?

잃다은 무슨 뜻인가요? 당신이 거기에 기록하고 그것이 될 것입니다. 왜 그것을 잃어 버려야합니까?

 
в чем проблема обращаться к единственной созданной переменной?

모든 사람은 자신의 환상의 세계에서 살 권리가 있습니다.

그러나 사용자 hoz 의 세계를 파괴하는 것은 어떻게 든 비정상적으로 어렵습니다 .

그의 머리 속으로 들어가 그가 그곳에서 상상했던 것을 다시 한 번 이해할 수 없기 때문입니다.

"현재 값을 잃지 않을 것입니다 " - 변수가 값을 잃기 위해 생성되었다고 생각하십니까?

현실에 있는 것:

변수에는 범위 , 저장 기간, 연결이 있습니다.

그것이 무엇인지 알아보십시오: 언제 어떤 변수가 무엇을 소유하는지, 언제 생성되는지, 언제 소멸되는지, 언제 어디에서 전송할 수 있는지 알 수 있습니다.

수명(보관 기간)에 대해 간략히 설명합니다.
정적(모든 함수 외부에서 또는 정적 지정자로 선언된 변수) - 사망 시간 = 프로그램 종료

자동(함수 내에서 선언된 변수) - 사망 시간 = 생성된 함수에서 종료

동적(새 키워드로 생성된 변수) - 사망 시간 = 삭제 키워드 사용

 
sergeev :

Expert Advisor에 다중 스레드 실행이 있습니까?

잃다은 무슨 뜻인가요? 당신이 거기에 기록하고 그것이 될 것입니다. 왜 그것을 잃어 버려야합니까?


여기 에서 문서를 열고 다음을 확인합니다.

 //+------------------------------------------------------------------+
//| Класс "Анализатор текстов"                                       |
//+------------------------------------------------------------------+
class СParser
  {
public :
   static int         s_words;
   static int         s_symbols;
   //--- конструктор и деструктор
                     Parser( void );
                    ~Parser( void ){};
  };
...
//--- инициализация статических членов класса Parser на глобальном уровне
int CParser::s_words= 0 ;
int CParser::s_symbols= 0 ;

클래스 또는 구조의 변수가 프로그램 실행 중에 값을 잃지 않는다면 왜 여기서 static으로 선언됩니까?

그들은 공개 섹션에 있으며 구조에서와 같이 말할 수 있습니다 ...

 
hoz :

여기 에서 문서를 열고 다음을 확인합니다.

클래스 또는 구조의 변수가 프로그램 실행 중에 값을 잃지 않는다면 여기서 static으로 선언됩니까?

그들은 공개 섹션에 있으며 구조에서와 같이 말할 수 있습니다 ...


그런 다음 ... 제공된 링크에서 두 번째 문장을 읽으십시오.

클래스의 정적은 함수의 정적과 약간 다른 의미를 갖습니다.

 
hoz :

클래스 또는 구조의 변수가 프로그램 실행 중에 값을 잃지 않는다면 왜 여기서 static으로 선언됩니까?

그들은 공개 섹션에 있으며 구조에서와 같이 말할 수 있습니다 ...


당신은 눈치가 느리거나 눈치가 느리거나 직설적이어서 죄송합니다. 흑백으로 작성되었습니다.

예를 들어 텍스트 구문 분석을 위한 CParser 클래스 있고 처리된 총 단어 및 문자 수 를 계산해야 합니다. 필요한 클래스 멤버를 정적 으로 선언하고 전역 수준에서 초기화하면 충분 합니다. 그런 다음 클래스의 모든 인스턴스는 작업 중에 단어 및 문자의 공통 카운터를 사용합니다 .

다음에 대해 적어도 한 번 언급된 곳:

클래스 또는 구조 변수는 프로그램 실행 중에 값을 잃습니다.

여기서는 OOP의 원칙을 유지하고 전역 변수를 생성하지 않으면 정적 클래스 멤버를 사용하여 거기에 있는 일부 단어의 수를 셀 수 있다고 말합니다.

그것( 정적 클래스 멤버) 은 단일 인스턴스에서 생성되며 이 클래스의 생성된 객체 수에 의존하지 않습니다.