É possível implementar um padrão de um único botão na MQL4. - página 5

 
sergeev:

O que é isso?

Foi isso que você pediu. Uma instância de uma classe... com um modificador externo. Absurdo, é claro. Mas...

Isso foi o que você disse. Mas eu não achei necessário.

sergeev:

Mas não seria uma boa idéia fazer uma instância de uma estrutura externa?

Eu não entendo o que o exterior tem a ver com isso? Eu não preciso "fazer" alguns dados para serem compartilhados, para que possam ser incluídos em qualquer outra classe. E estas variáveis não devem perder seus valores durante a execução do programa, ou seja, devem ser estáticas. Você está me falando sobre o exterior. Para quê?

 
hoz:

Isto é o que você pediu. Uma instância de classe... com um modificador externo. Absurdo, é claro. Mas...

compilava alguma coisa?


Eu não preciso "fazer" alguns dados para serem compartilhados,
como você precisa?
 
sergeev:

compilava alguma coisa?

Ainda não verifiquei. Como o que é necessário, ainda não foi implementado.

sergeev:

O que você precisa?

Vou repetir o que eu preciso... Existe uma estrutura, cujos membros têm que salvar seus valores durante a execução do programa, mas quando qualquer método de qualquer classe que utilize esta estrutura é acessado, os membros podem ser modificados. Entendo que eles precisam ser estáticos. Estes membros devem estar em um único caso. Os membros desta estrutura serão utilizados por muitas classes e pelo próprio Expert Advisor.

Costumava ser assim:

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;

Mas, neste caso, é inconveniente se referir a tais variáveis, pois o "nome" é longo. Isto é

Symbol_Properties::gd_Pt = 0;

Como implementar isto?

 
hoz:

Deixe-me repetir o que eu preciso... Há uma estrutura cujos membros devem salvar seus valores durante a execução do programa, mas quando qualquer método de qualquer classe que utilize esta estrutura é acessado, os membros podem ser modificados. Entendo que eles precisam ser estáticos. Estes membros devem estar em um único caso. Os membros desta estrutura serão utilizados por muitas classes e pelo próprio Expert Advisor.

qual é o problema de se referir a uma única variável criada?

 

E consulte-os por ESTRUTURA NOME.NOME DO MEMBRO?

Mas existe uma garantia de que esta variável não perderá seu valor atual no momento da execução?

 
hoz:

E consulte-os por ESTRUTURA NOME.NOME DO MEMBRO ?

nome variável.nome do membro.


Mas existe uma garantia de que esta variável não perderá seu valor atual durante a execução do programa?

por exemplo, a sede?

você tem execução multi-tarefa na EA?

o que você quer dizer com isso? o que você coloca nele, por que deveria ser perdido?

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

Todos têm o direito de viver em um mundo de suas próprias ilusões,

mas destruir o mundo do usuáriohoz éinvulgarmente difícil

porque não se consegue entrar na cabeça dele e descobrir o que ele está imaginando.

"não perderá seu valor atual" - Você acha que as variáveis são criadas para perder seus valores?

Que na realidade:

As variáveis têmum escopo, uma duração de armazenamento e uma ligação.

Saiba o que é: Que variável tem que escopo, quando é visível, quando é criada, quando é destruída e para onde e quando pode ser passada.

Brevemente sobre a vida útil do armazenamento:
estático (variável declarada fora de todas as funções ou com especificador estático) - hora do óbito = término da existência do programa

automático (uma variável declarada dentro de uma função) - hora da morte = deixar a função onde ela é criada

dinâmico (variável criada usando a palavra-chave nova) - hora da morte = uso da palavra-chave apagar

 
sergeev:

você tem multithreading na EA?

o que você quer dizer com isso? o que você colocou lá estará lá, por que deveria estar perdido?


Abre aqui a documentação e vê isso:

//+------------------------------------------------------------------+
//| Класс "Анализатор текстов"                                       |
//+------------------------------------------------------------------+
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;

Se as variáveis de classe ou estrutura não perdem seus valores durante a execução do programa, por que elas são declaradas como estáticas aqui ?

Eles estão na seção pública, pode-se dizer que, como na estrutura.

 
hoz:

Abre a documentação aqui e vê isso:

Se as variáveis de classe ou estrutura não perdem seus valores em tempo de execução, por que são declaradas como estáticas aqui ?

Eles estão na seção pública, pode-se dizer que, como na estrutura.


Então... Leia a segunda frase no link dado a você.

Uma estática em uma classe tem um significado ligeiramente diferente de uma estática em uma função.

 
hoz:

Se as variáveis de classe ou estrutura não perdem seus valores em tempo de execução, por que são declaradas estáticas aqui?

Eles estão na seção pública, pode-se dizer como na estrutura.


Ou você é obtuso ou obtuso, desculpe por ser grosseiro, mas está escrito em preto e branco:

Por exemplo, temos uma classeCParser destinada a analisar textos, eprecisamos contaro número total de palavras e caracteres processados.Basta declarar osmembros da classe necessáriosestáticos e inicializá-los globalmente.Então todas as instâncias da classeusarão contadores de palavras e caracteres comuns quando estiverem funcionando.

Onde sempre há uma referência:

As variáveis de classe ou estrutura perdem seus valores no momento da execução

Diz que preservando os princípios do OOP e não criando variáveis globais, podemos contar o número de algumas palavras com a ajuda de um membro da classe estática,

ele(membro da classe estática) é criado como uma única instância e não depende de quantos objetos de uma determinada classe são criados.