Características da linguagem mql5, subtilezas e técnicas - página 124

 
Comentários não relevantes para este tópico foram transferidos para"OOP, modelos, macros em mql5, dicas e truques do ofício".
 

Não sei se foi afixado aqui ou não, mas pode ser útil a alguém. Quando se precisa de sobrecarregar um método de uma classe parametrizada apenas pelo facto de se tomar um argumento do mesmo tipo por valor ou por referência (as estruturas são passadas apenas por referência, os tipos simples na maioria das vezes por valor). Pode ser feito desta forma (e a segunda forma aplica-se exactamente à variante sem &, caso contrário, a dactilografia básica por estruturas não será compilada)

template<typename T>
class A
 {
public:
  A* operator<<(T&p){ Print("<< &",typename(T)); return &this; }
  template<typename F>
  A* operator<<(F p){ Print("<< ",typename(F)); return &this; }
 };

void OnStart()
 {
    double ask=Ask,bid=Bid;
    MqlTick mt;
    A<double> a1;
    a1<<Ask<<Bid<<ask;
    A<MqlTick> a2;
    a2<<mt; 
 }

Discussão aqui.

 
Ilya Malev:

Não me lembro se estava aqui ou não, mas pode ser útil a alguém. Quando se pretende sobrecarregar um método de uma classe parametrizada apenas por valor, ou apenas por referência (estruturas são passadas apenas por referência, tipos simples na maioria das vezes por valor). Isto pode ser feito desta forma (além disso, o segundo modelo aplica-se exactamente à variante sem &, caso contrário a dactilografia básica por estruturas não será compilada)

Acontece então que uma classe concebida para um tipo de estrutura pode aceitar todo o tipo de tipos numéricos. E o que fazer com eles?

 
Alexey Navoykov:

Acontece então que uma classe concebida para um tipo de estrutura pode aceitar todo o tipo de tipos numéricos. E o que fazer com eles?

Neste caso, a classe é destinada a tipos mistos - tanto para estruturas como para tipos simples, caso contrário, esta construção não faz sentido. Para evitar tomar tipos desnecessários em F, pode escrever aí um cheque com o nome datilográfico(F), tamanho do(F), etc.

 
Ilya Malev:

Neste caso, a classe destina-se ao tipo misto - tanto para estruturas como para tipos simples, caso contrário, esta construção não faz sentido. A fim de não aceitar tipos desnecessários em F, pode aí passar um cheque com o nome datilografar(F), tamanho de(F), etc.

O nome datilográfica não protegerá de aceitar tipos desnecessários) Para isso, é necessário fazer um método privado sobrecarregado com um tipo apropriado.

E se a classe se destina a qualquer tipo, porquê parametrizá-la com um parâmetro modelo, criando confusão? Embora existam variantes mais simples para a muleta, sem classes de modelos.

 
Alexey Navoykov:

se uma classe se destina a ser de qualquer tipo, porquê parametrizá-la com um parâmetro modelo, criando confusão?

Então como é que se toma o tipo certo, que pode ser qualquer tipo, sem se comprometer a parametrização? Não se pode declarar um parâmetro ou campo sem especificar um tipo. Por exemplo, poderia ser uma classe de "invólucro" sobre um tipo de dados arbitrários.

Alexey Navoykov:

o nome da máquina não protege contra a aceitação de tipos desnecessários )

Se escrever o nome datilógrafo(F)==typename(T), ele irá proteger.

 
Ilya Malev:

Então, como é que vai conseguir o tipo certo, que pode ser qualquer coisa, sem passar a parametrização? Não se pode declarar um parâmetro ou um campo sem especificar um tipo. Por exemplo, pode ser uma classe de "invólucro" para um tipo de dados arbitrários.

Bem, então é apenas classe A. Porquê declarar um padrão se o seu parâmetro não está de modo algum relacionado com o comportamento da classe?

Ilya Malev:

Se escrever o nome datilógrafo(F)==typename(T), ele irá protegê-lo.

Isto é realmente uma coisa cruel de se fazer. Trazer o controlo do nome datilografia para a fase de execução... Os seus códigos terão de ser depurados durante anos

 
Pode dizer-me onde posso procurar uma paragem regular para um fiver?
 
Nikita Chernyshov:
Pode dizer-me onde posso procurar uma paragem regular para um fiver?

iSAR iOsMA EA-Trailing

 
Vladimir Karputov:

iSAR iOsMA EA-Trailing

Obrigado!

Razão: