Como substituir a comparação() em CObject para que a classificação CList() funcione? - página 4
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
Estou apenas curioso por que você precisava do operador "&" nafunção Comparar() para obter o valor de "isto".
Porque o método Compare() é "const", e não é possível chamar métodos que não sejam "const" dentro dele.
Neste exemplo, veja código na página 2, o método getPrice() não é const e dentro dele a função CopyClose() também não é const. Todos os métodos podem ser classificados como "const", mas CopyClose() não é const.
De qualquer forma, o operador "&" dá acesso aos métodos não constantes, portanto, podemos chamá-los dentro de ummétodo "const".
Porque o método Compare() é "const", e não é possível chamar métodos não const dentro dele.
Neste exemplo, veja código na página 2, o método getPrice() não é const e dentro dele a função CopyClose() também não é const. Todos os métodos podem ser classificados como "const", mas CopyClose() não é const.
De qualquer forma, o operador "&" dá acesso a métodos não constantes, portanto, podemos chamá-los dentro de ummétodo "const".
Agora eu vejo. Não tenho idéia, se é uma construção válida, provavelmente você sabe. Para mim, é melhor evitar completamente declarações do método "const" em MQL, como em Java.
Estou vendo agora. Não tenho idéia, se é uma construção válida, provavelmente você sabe. Para mim, é melhor evitar declarações do método 'const' completamente em MQL, como em Java.
A fim de utilizar os métodos (muito úteis) das classes de coleção da biblioteca std (ou seja, busca, classificação, etc.) você tem que substituir o método de comparação de CObject. Isto significa que todos os métodos chamados de dentro do método Comparar também têm que ser métodos constantes. OP não contornou este detalhe, OP apenas não usou o ponteiro"isto" corretamente. Assim, ao invés de simplesmente chamar isto.DoSomething(), OP criou seu próprio ponteiro para (auto)objeto. ex. otherSelfPointer.DoSomething()
A fim de utilizar os métodos (muito úteis) das classes de coleção da biblioteca std (isto é, busca, classificação, etc.) você tem que substituir o método de comparação de CObject. Isto significa que todos os métodos chamados de dentro do método Comparar também têm que ser métodos constantes. OP não contornou este detalhe, OP apenas não usou este ponteiro corretamente. Assim, em vez de chamar isto.DoSomething(), OP criou seu próprio ponteiro para (auto)objeto em vez de simplesmente usar esta palavra-chave, por exemplo, otherSelfPointer.DoSomething()
Entendo o que ele fez, a questão agora é, se esta construção é inofensiva (em geral). O compilador não espera que o objeto modifique seus membros em funções constantes.
Entendo o que ele fez, a questão agora é, se esta construção é inofensiva (em geral). O compilador não espera que o objeto modifique seus membros em funções constantes.
Neste caso específico eu só estou recebendo o valor, não estou mudando nada. Mas, se tentarmos mudar um valor const provavelmente o compilador alertará sobre este problema, ou, no pior dos casos, teremos uma exceção de tempo de execução.
Entendo o que ele fez, a questão agora é, se esta construção é inofensiva (em geral). O compilador não espera que o objeto modifique seus membros em funções constantes.
Ohhh.... Vejo agora, meu erro. Isso pode ser potencialmente perigoso. OP deve certificar-se de que todos os métodos dentro da visão de comparação() também são métodos constantes.
Oi @Alain Verleyen,
Eu alterei o método getPrice(), inseri usando CopyClose() Eu estou usando CopyBuffer(). Isto não muda o objetivo principal.
Portanto, se eu usar a palavra-chave "const" no método getPrice(), um erro getPrice(): "'CopyBuffer' - nenhuma das sobrecargas pode ser aplicada à chamada de função". Acho que isto ocorre porque CopyBuffer não é um método const, e não é possível chamar o método non const dentro de um método const.
Desculpe pela resposta tardia, mas não tive tempo de acompanhar o assunto até agora.
Ainda não vejo porque você não pôde declarar seu getPrice() como constante ao usar CopyBuffer(). Não faz sentido para mim, você poderia postar sua versão atualizada de getPrice()?
Qualquer atualização