OOP, modelos e macros em mql5, sutilezas e usos - página 3

 
Алексей Тарабанов:

Você encontrou uma maneira de criá-lo.

Você está confuso com alguma coisa.
 
Ilya Malev:

Você está tentando usar um campo estático deuma classe na fase de inicialização antes que pelo menos 1 instância dessa classe tenha sido criada. Na minha opinião, isto é uma perversão... É assim que funciona normalmente:

O princípio do encapsulamento geralmente implica que tais campos devem ser escondidos, e não públicos.

Um campo estático é um campo estático por essa razão, portanto não depende de ter instâncias da classe. Mas se você quiser criar uma instância da classe primeiro - ok, crie-a, mas somente dentro da função. E solicite este campo dele (diretamente ou através de um método) - o resultado é o mesmo novamente.

 
Alexey Navoykov:
Você está confuso com alguma coisa.

Não, eu não estou confuso com nada.

Primeiro as variáveis de nível global, depois as variáveis estáticas e depois as variáveis locais, como aparecem no código.

Este exemplo particular viola a recomendação da documentação de nãoinicializar variáveis com funções. Foi mais fácil para os desenvolvedores escrever tal aviso do que explicar onde eles devem e não devem.

Remova a estática de sua amostra e obtenha o resultado desejado.

 
Алексей Тарабанов:

Não, eu não estou confuso com nada.

Primeiro as variáveis de nível global, depois as variáveis estáticas e depois as variáveis locais, como aparecem no código.

Este exemplo particular viola a recomendação da documentação de nãoinicializar variáveis com funções. Foi mais fácil para os desenvolvedores escrever tal aviso do que explicar onde eles devem e não devem.

Remova a estática de seu exemplo e obtenha o resultado desejado.

"Recomendação de documentação". )) Estou surpreso com você. Você ainda não entendeu, não é mesmo? Há um bug no idioma. Os próprios desenvolvedores estão falando sobre isso, e estão explicando a você como fazer pandeiro corretamente para não se deparar com este bug. Eu fiz questão de esquecer de uma vez por todas este bug.
 
Alexey Navoykov:

Se é uma constante (e a visibilidade global declara em sua maioria constantes, se o código é inteligente), não há outra escolha.

Com relação a tudo em amarelo, tenho uma pergunta: Por quê? Eu já descobri como resolver o problema.

AQUI, para não fazer bagunça do que você já fez.

 
Alexey Navoykov:
"Recomendação de documentação". )) Estou surpreso com você. Você realmente ainda não entendeu o ponto? Há um bug no idioma. Os próprios desenvolvedores estão falando sobre isso, e explicam como fazer o pandeiro corretamente para não se deparar com este bug. Eu fiz questão de esquecer de uma vez por todas este bug.

Não se pode iniciar o valor de algo com uma função. Mesmo se você realmente quiser. Você não entendeu?

 
Alexey Navoykov:

Um campo estático é um campo estático, portanto não depende de instâncias da classe. Mas se você quiser criar uma instância da classe primeiro, OK, crie-a, mas somente dentro da função. E solicite este campo a partir dele (diretamente ou via método) - o resultado será o mesmo novamente.

Então, é uma programação processual ou orientada a objetos? Por que devemos executar funções não relacionadas a classes no estágio anterior à inicialização com referência a objetos datilografados além disso. Entendo que a resposta é "porque me apetece". Mas se eu fosse o desenvolvedor, não teria pressa em cancelar tudo e correr para corrigir este comportamento particular, pois é uma arquitetura bastante marginal e, além disso, o problema é facilmente resolvido com a criação de uma instância da classe. Não dentro da função, é claro.

 
Alexey Viktorov:

PARA SEMPRE, para não fazer uma bagunça da bagunça que você já fez.

Já o fiz e não me arrependo nem um pouco. Você, por outro lado, parece ter muito prazer em se limitar com restrições artificiais impostas pela MQ. Talvez você seja masoquista? ) E, no entanto, você tão insistentemente tenta me convencer de que esta é a maneira de fazer isso. Não é necessário, é forçado.
 
Алексей Тарабанов:

Não se pode iniciar o valor de algo com uma função. Mesmo se você realmente quiser. Você não entendeu?

Sim, eu não entendo. Explique.
 
Ilya Malev:

Então, é uma programação processual ou orientada a objetos? Por que, de repente, executar funções não relacionadas a classes antes da inicialização em relação a objetos datilografados. Entendo que a resposta é "porque me apetece". Mas se eu fosse o desenvolvedor, não teria pressa em cancelar tudo e correr para corrigir este comportamento particular, pois é uma arquitetura bastante marginal e, além disso, o problema é facilmente resolvido com a criação de uma instância da classe. Não dentro de uma função, é claro.

Então você é um defensor do uso em massa de variáveis globais, como eu o entendo. Então é improvável que você e eu nos entendamos um ao outro.

Além disso, a função em si pode ser um modelo. E a instância criada, respectivamente, deve ser parametrizada pelo mesmo tipo:

template<typename T>
int f()
{  
  A<T> a;
  return a.f();
}

O que você faz?