Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Bem, em outras palavras, você repetiu o que eu escrevi. A questão não era se ela pode ou não pode, mas por que não pode e como podemos trabalhar elegantemente em torno disso
apenas escreva funções para conversões e não se preocupe com os métodos de interruptor interno?
Duplo(CParameter<double>)
Cordão de corda(CParameter<double>)
e uso :
PrintFormat("%s %s %f",String(param1),String(param2),Double(param1));
Qual é a diferença entre usar um operador unário ou uma função nomeada? Uma função é melhor - um operador já tem uma carga semântica e você não quer mudá-la à vontade.
O controle de tipo é perdido. Veja os recursos do C++ para respostas a estas perguntas. Acho que são perguntados com bastante frequência.
Bem, pelo menos é claro que isto não é uma limitação de mql, mas uma característica do C++ em geral, e obrigado por isso :)
Com sobrecarga explícita e ações aritméticas, tudo fica claro. Sim, sobrecarregado = é claramente melhor neste caso, você está certo, eu estava apenas construindo precipitadamente um exemplo para uma pergunta e não pensei realmente sobre isso (embora não haja apenas int, mas também char, uchar, short, ushort, uint, bool e cor, então nem tudo é inequívoco )))))))
A questão aqui é que o tipo de valor de retornodo método sobrecarregado depende do conteúdo do objeto.
Por exemplo, temos um conjunto de vários tipos (não citarei exemplos, porque há muitos livros). E, claro, qualquer matriz deve ter a operação [] de indexação que retorna o valor de uma variável com um índice apropriado.
Mas as variáveis têm tipos diferentes. Pode ser data ou string ou mesmo algum tipo definido pelo usuário sob este índice. E idealmente, eu gostaria que o tipo de valor de retorno gerasse automaticamente o tipo apropriado ao indexar [], sem ter que parametrizá-lo explicitamente. Eu costumava resolver este "problema" desta maneira: var[(char)1], var[(short)1], var[(uint)1], etc., mas estas muletas são inúteis.
Use um conjunto de estruturas como mqlparam.
Um conjunto de estruturas como mqlparam.
Não pode ser equiparado a duplo, cordel ou longo da mesma forma.
MqlParam par;
par.double_value = Perguntar;
duplo d = par; // '=' - uso de operação ilegal
Não se pode equipará-lo a um duplo, cordel ou longo da mesma forma.
MqlParam par;
par.double_value = Perguntar;
duplo d = par; // '=' - uso de operação ilegal
Você vê de que tipo é e o atribui ao campo apropriado. Parece ser uma abordagem tortuosa e você ainda está procurando uma solução perfeita. Tal tarefa não deve surgir de forma alguma.
A impossibilidade de sobrecarregar os operadores sem ligar o operador sobrecarregado a um objeto ou estrutura específica também é uma característica C++?
Isto é o que a internet diz sobre isto:
A sobrecarga de funções não é possível se elas diferem apenas no tipo do valor de retorno.
Norma C++14 13.1/2:
Encontrei isto na rede em respostas a uma pergunta semelhante:
Pelo que entendi, o operador está sobrecarregado aqui para digitar "operador T()" - isso significa que em C++ é pelo menos possível. Mas em mql, como eu entendo, ainda não está.
uma pergunta semelhante: por que quando se sobrecarrega um método (na assinatura do método sobrecarregado) o tipo de retorno não aparece, mas apenas os tipos de parâmetros. ou seja, não é possível definir dois métodos idênticos com tipos de valores de retorno diferentes. por que esta restrição é feita? para que serve isto, por que não é possível sobrecarregar um método pelo tipo de valor de retorno com parâmetros idênticos
É provavelmente por isso:
Qual função deve ser chamada exatamente?
É provavelmente por isso:
Qual função deve ser chamada exatamente?
Um erro de descasamento do modelo deve provavelmente ocorrer no momento da compilação.
Mas na situação em que há um objeto de matriz
tal erro não deve ocorrer porque no primeiro caso a chamada da operação Array[int] é usada como parâmetro esquerdo = e não é variável dupla, mas no segundo caso é a direita, e o parâmetro esquerdo é variável de tipo duplo.
Assim, tudo se resume a querer introduzir na mql a possibilidade de sobrecarregar a operação de digitação (incluindo implícita), ou seja, definir o contexto para a chamada do método e, dependendo do esperado neste tipo de contexto de valor retornado, chamar o código requerido. E se o contexto não for definido explicitamente, isso gerará um erro.