Erros, bugs, perguntas - página 2272

 
fxsaber:

Uma só é criada. Além disso, em f não poderá utilizar T.

Isto em si mesmo é um erro.
template<typename T>
void f() { Print( sizeof( T )); }
struct A { int a; };
void OnStart()
{
        f<int>(); //(1)//нормально
        f<A>();   //(2)//нормально
struct B { int b; };
        f<B>();   //(3)//Error: 'B' - undeclared identifier
}
E qual é a diferença fundamental entre (1)(2) e (3) ????
 
fxsaber:

Além disso, em f não poderá utilizar T. Tudo somado, a situação é óbvia para mim.

Além disso, violou a sua proibição de utilizar T em f

template<typename T>
void f() { class T; Print(__FUNCSIG__, ":" , sizeof(T)); }
template<typename T1, typename T2>
void g() { class T1 { T2 x; } a; f<T1>(); }
void OnStart()
{
class A {};
        g<A,int   >();
        g<A,double>();
}

Como se pode ver, compila sem erros, e o facto de o resultado ser absurdo não é importante desde que tudo seja "explicável".

 
Olá a todos. Ajuda. Não posso fazer negócios de ouro, tudo está a funcionar, mas são os negócios que não posso fazer. Aqui estão screenshots de como se parece.
Arquivos anexados:
 

Qual é o significado sagrado deste código, porque o enfiaram de todo na biblioteca padrão?

   if(IsStopped(__FUNCTION__))
      return(false);

Agora é impossível utilizar funções de fecho de posições ou encomendas da biblioteca padrão em OnDeanite, por exemplo com REASON_REMOVE

 
Stanislav Dray:

Qual é o significado sagrado deste código, porque o enfiaram de todo na biblioteca padrão?

Agora não pode usar funções para fechar posições ou encomendas da biblioteca padrão na OnDynit, por exemplo com REASON_REMOVE.

Sim, isso é um insecto.

 
A100:

Além disso, violei a sua proibição de utilizar T em f

Como vê, compila sem erros, e o facto de o resultado ser absurdo não é importante - o principal é que tudo é "explicável".

Não se compreende bem o que são os modelos. São semelhantes às macros apenas com determinadas características.

Aqui está o código

template<typename T>
void f() { class T{ MqlTick a; }; Print(__FUNCSIG__, ":" , sizeof(T)); }
template<typename T1, typename T2>
void g() { class T1 { T2 x; } a; f<T1>(); }
void OnStart()
{
class A {};
        g<A,int   >();
        g<A,double>();
}

.

void f<A>():68
void f<A>():68

Isto porque T é uma armadilha, como macros, apenas com certas advertências. O que temos no final é que é criada uma assinatura. Dentro da função ninguém sabe de A que é substituída por T na função. Mas define-se este A no interior, para que não ocorra mais nenhum erro de compilação. Inseri MqlTick dentro para mostrar que este A não tem nada a ver com outras classes com o mesmo nome.

Em suma, as intraclasses em MQL5 não são visíveis fora da função dos pais. Apenas o nome do tipo como uma classe é passado como T. Neste caso, o nome não tem qualquer referência à função parental.

Isto é, tudo é logicamente explicável. Não é um insecto, mas uma implementação tão limitada.


Talvez numa entrevista de emprego, um programador C++ diria que isto é impossível.

template<typename T>
void f() { class T{}; }


A MQL5 é bastante possível.

 
fxsaber:

Não se compreende bem o que são padrões.

fxsaber:

ZS Provavelmente um programador em C++ numa entrevista de trabalho dir-lhe-á que isto é impossível

Se pensa que isto é impossível em C++ significa que não sou eu mas você que não entende o que são e como funcionam os modelos... ainda mais que não se pode distinguir uma implementação descuidada de uma implementação restrita

 
A100:

Se pensa que tal coisa é impossível em C++ - isso significa que não sou eu, mas não compreende o que são e como funcionam os modelos... ainda mais para que não se possa distinguir uma implementação desleixada de uma implementação limitada

Leia a primeira palavra da frase sobre a qual faz o seu comentário. A minha compreensão dos modelos e macros na MQL5 é tal que percebo, sem tentar compilar, que os vossos exemplos não serão compilados na MQL5. C++ - Não sei, isso não o impede.


Ficar-lhe-ia grato se pudesse mostrar como C++ reage a este código

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Insectos, insectos, perguntas

fxsaber, 2018.09.03 07:16

ZS Provavelmente um programador em C++ numa entrevista de trabalho dir-lhe-á que isto é impossível

template<typename T>
void f() { class T{}; }
 
fxsaber:

Agradecia que me mostrassem como o C++ reage a este código.

A reacção é a mesma que na MQL. Porque deveria ser diferente? Um modelo é um modelo
 
fxsaber:

Não se compreende realmente o que são os modelos. E são semelhantes a macros, apenas com alguns truques.

Sim, este exemplo não se compila sobre as vantagens

erro: declaração de 'struct f()::T' modelo de sombras param modelo<typename T>

mas mesmo que compilado, o resultado surpreendê-lo-ia porque o nome da classe seria apenas "T".

se for diferente em mql, isto é incorrecto
Razão: