Erros, bugs, perguntas - página 2869

 
A100:

Tem um erro de sintaxe - dê um exemplo de código de trabalho com (nome datilografado) entre parênteses. Pode também escrever (OnStart) entre parênteses

Bem, não há erro de sintaxe

typename(J)

Mas será que já considera este código um erro de sintaxe?

(typename)J

Quando um princípio de conversão de tipo é suposto funcionar aqui, e a Ajuda permite ambas as variantes.

 
Roman:

Desta forma, não há erro de sintaxe.

Isto conta como um erro de sintaxe?

Quando o princípio da conversão de tipo é suposto funcionar aqui, e a ajuda permite ambos.

template<typename T>

O nome datilógrafo não é um tipo, é uma palavra-chave. Neste caso, o tipo é T. A conversão é para um tipo, não para a palavra-chave.

A justificação filosófica não é apropriada aqui. Embora se a MQL fosse uma linguagem abstracta, poderíamos provavelmente recorrer ao casting para a palavra-chave e esta subiria para o 1º lugar no ranking

 
A100:

O nome datilógrafo não é um tipo, é uma palavra-chave. Neste caso, o tipo é T. A conversão é para um tipo, não para uma palavra-chave

A justificação filosófica não é apropriada aqui. Embora, se a MQL fosse uma linguagem abstracta, provavelmente poderíamos lançá-la para a palavra-chave, e ela subiria para o 1º lugar na classificação

Compreendo que o nome datilógrafo não é um tipo.
Mas neste caso, estamos a receber uma transformação.
Obtemos o seu tipo a partir de uma constante.
Talvezisto não seja correcto em termos de sintaxe? Mas funciona.

#define  A '+'

typename(A)
 
Roman:

Compreendo que o nome datilógrafo não é um tipo.
Mas neste caso, obtemos uma conversão.
A partir de uma constante, obtemos o seu tipo.
Talvezesta não seja a sintaxe correcta? Mas funciona.

Funciona, mas não da forma que se pensa que irá funcionar. Não se obtém um tipo mas um fio. Queria mostrar-vos isto pelo exemplo, mas recebi um erro abaixo.

Mas não significa que esteja certo - apenas mais um erro do compilador.

 
Erro de compilação:
void OnStart()
{
    Print(typename("ushort"));      //(1) нормально
    Print(typename(typename('+'))); //(2) Error: 'typename' - unexpected token
}

Qual é a diferença entre (1) e (2) ? Caros programadores - talvez Roman tenha razão e agora o nome datilografar retorna tipo?

O resultado era esperado: cordel

 
A100:

Funciona, mas não da forma que se imagina. Não se obtém um tipo, mas um fio. Queria mostrá-lo com um exemplo, mas recebi um erro:

O que quer dizer com não é um tipo?
É um tipo, não um fio.
ushort não é uma corda.

#define   A '+'

void OnStart()
{
   Print(typename(A));
   Print(typename("string"));
}
2020.10.09 01:45:54.402 TestScript (MNQZ20,M1)  ushort
2020.10.09 01:45:54.402 TestScript (MNQZ20,M1)  string
 
Roman:

Como é que não é um tipo?
Apenas a obtenção de um tipo, não de uma corda.
Ushort não é uma corda.

Não é "ushort", mas sim "ushort". Compreende a diferença? se não, leia a documentação antes de compreender.

Embora fosse fixe obter um verdadeiro "ushort"!

 
A100:

Não é "ushort", mas sim "ushort". Compreende a diferença? se não, leia a documentação para compreender

Então Print() já o imprime como "ushort" com uma corda literal.
O que é que tem a ver com isto? O próprio facto de o nome datilógrafo devolver um nome de tipo!

 
Roman:

Portanto, isto já imprime Print() como um fio "ushort" literalmente.
O que é que isso tem a ver com isto? O próprio facto de o nome datilógrafo devolver um nome de tipo!

Já leu a documentação no link? Também aí há um exemplo. Infelizmente, o meu exemplo falhou.

 
A100:

Já leu a documentação no link?

O que tem isso a ver com os modelos?
Se a sintaxe de utilização não for para um modelo, neste caso.