Alexey Navoykov: A propósito, não entendo este código, em que lugar será chamado operator===? É apenas uma comparação de dois longos, é tudo
class A { public:
booloperator==( const A& ) { Print(__FUNCTION__); return true; }
};
class B {};
voidOnStart()
{
bool res;
A *a1, *a2;
B *b1, *b2;
res = a1 == a2; //сейчас сравниваются указатели //предлагается вызывать operator==()
res = b1 == b2; //сравниваются указатели (предложение здесь ничего не меняет, поскольку нет B::operator==)
res = IsEqualPointer( a1, a2 ); //сравниваются указатели
}
IsEqualPointer pode ser ou um modelo ou uma função geral semelhante a ::GetPointer
IsEqualPointer pode ser ou um padrão ou uma função geral semelhante a ::GetPointer
Não o compreendo de todo, poderia explicar em linguagem humana o que está a tentar fazer? O código dado tem erros (operador== não tem argumento, nem valor de retorno), é difícil de compreender algo de tudo isto.
Deixe-me dizer-lhe desde já que o problema da comparação/atribuição de apontadores nunca existiu antes, GetPointer(a)==GetPointer(b) é suficiente para isso. Assim, a tarefa diz respeito apenas à comparação/atribuição dos próprios objectos, ou seja, é garantido que estas operações serão realizadas, independentemente de estes objectos serem representados por apontadores ou referências
O código que deu tem erros (operator=== não tem qualquer argumento ou valor de retorno), é difícil de entender alguma coisa de tudo isto.
Corrigido. Sugere-se chamar operator==(...) para apontadores também, se for definido, então GetPointer(a)==GetPointer(b) fará com que a.operator==( b ) seja chamado, por isso para comparar apontadores para igualdade sugere-se usar IsEqualPointer
A propósito, que tal introduzir * e & operadores em MQL para permitir o acesso explícito a um objecto no primeiro caso, e levar um ponteiro de objecto no segundo (em vez do pesado GetPointer). O asterisco é uma obrigação, e não há nada na língua que o substitua.Sem ele, é impossível controlar situações como a descrita por A100 acima, quando em vez dos próprios objectos são executadas algumas acções de ponteiro. Pessoalmente, este é um problema constante, tenho de estar constantemente alerta ou especificar A.operator=(B), A.operator!=(B) em todo o lado, ou seja, perde-se a brevidade, e os operadores de sobrecarga tornam-se de facto inúteis.
Já levantei este problema uma vez, mas o assunto ficou parado. Vamos finalmente terminar esta questão.
Obrigado pela mensagem, se se estiver a referir à seguinte utilização:
A100: ... Se equiparar operator== com operator<, o resultado também será o mesmo.
Nem sequer verificou o que sugeriu! Tal como no caso anterior, quando havia erros óbvios no código, ou seja, nem sequer tentou compilá-lo. Desenhou algo numa manivela, alguns pensamentos seus, como "coma-o enquanto eu sou gentil, sem piedade"... Não vamos fazer este tipo de disparate.
Eu próprio comparo constantemente indicadores e operadores de sobrecarga, e nunca aconteceu aquilo com que sonha agora. E agora que verificou o seu código, nenhum milagre aconteceu, operator=== não é executado como deveria ser.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
A propósito, não entendo este código, em que lugar será chamado operator===? É apenas uma comparação de dois longos, é tudo
...
IsEqualPointer pode ser ou um padrão ou uma função geral semelhante a ::GetPointer
Não o compreendo de todo, poderia explicar em linguagem humana o que está a tentar fazer? O código dado tem erros (operador== não tem argumento, nem valor de retorno), é difícil de compreender algo de tudo isto.
Deixe-me dizer-lhe desde já que o problema da comparação/atribuição de apontadores nunca existiu antes, GetPointer(a)==GetPointer(b) é suficiente para isso. Assim, a tarefa diz respeito apenas à comparação/atribuição dos próprios objectos, ou seja, é garantido que estas operações serão realizadas, independentemente de estes objectos serem representados por apontadores ou referências
O código que deu tem erros (operator=== não tem qualquer argumento ou valor de retorno), é difícil de entender alguma coisa de tudo isto.
GetPointer(a)==GetPointer(b) irá causar a.operator==( b )
A propósito, que tal introduzir * e & operadores em MQL para permitir o acesso explícito a um objecto no primeiro caso, e levar um ponteiro de objecto no segundo (em vez do pesado GetPointer). O asterisco é uma obrigação, e não há nada na língua que o substitua.Sem ele, é impossível controlar situações como a descrita por A100 acima, quando em vez dos próprios objectos são executadas algumas acções de ponteiro. Pessoalmente, este é um problema constante, tenho de estar constantemente alerta ou especificar A.operator=(B), A.operator!=(B) em todo o lado, ou seja, perde-se a brevidade, e os operadores de sobrecarga tornam-se de facto inúteis.
Já levantei este problema uma vez, mas o assunto ficou parado. Vamos finalmente terminar esta questão.
Concordo com isso, levantarei definitivamente a questão e discuti-la-emos.
Porque seria?
...
Se equiparar operator== com operator<, o resultado também será o mesmo.
Nem sequer verificou o que sugeriu! Tal como no caso anterior, quando havia erros óbvios no código, ou seja, nem sequer tentou compilá-lo. Desenhou algo numa manivela, alguns pensamentos seus, como "coma-o enquanto eu sou gentil, sem piedade"... Não vamos fazer este tipo de disparate.
Eu próprio comparo constantemente indicadores e operadores de sobrecarga, e nunca aconteceu aquilo com que sonha agora. E agora que verificou o seu código, nenhum milagre aconteceu, operator=== não é executado como deveria ser.
Assim, agora que verificou o seu código, não aconteceram milagres, o operador=== não começa como deveria.
O objectivo da frase é precisamente o de a desencadear.
Para que serve isso? Está de cabeça para baixo.
Faz mais sentido o contrário: < e > deve causar a comparação de apontadores.