Erros, bugs, perguntas - página 2156

 
A100:

Depende de onde - é necessário um exemplo completo para responder à pergunta

Em qualquer lugar que se enquadre no contexto. Considero a entrada em si um tanto absurda, apesar da sua validade.

 
fxsaber:

Em qualquer lugar que se enquadre no contexto. A entrada em si parece-me um tanto absurda, apesar da sua validade.

Antes da // a entrada é normal... depois, é absurdo.

 
A100:

Antes da // a entrada é normal... depois é absurdo

Não vejo nada de absurdo em querer atribuir um campo de função a um ponteiro a um método

typedef void (*fn)();

void g() { Print(__FUNCSIG__); }

struct A
{
  fn f;
  
  A() : f(g) {}
};

struct B : A
{
  void f() { Print(__FUNCSIG__); }
  
  void A100()   { this.f = this.f; } // не присвоить полю-функции указатель на одноименный метод, а на другой метод - пожалуйста:
  void A100_2() { this.f = this.h; } // 'h' - pointer to this function type is not supported yet
  
  void h() { Print(__FUNCSIG__); }
};

void OnStart()
{
  B b;
  
  b.f(); // void g()
  
  b.A100();
  
  b.f(); // void g()
}
 
fxsaber:

Não vejo nada de absurdo em querer atribuir um ponteiro a um método a um campo de funções

O que é absurdo é que o compilador não suporta apontadores para métodos simples, e mesmo que o fizesse, um apontador para um método simples e um apontador para uma função comum terá uma assinatura diferente, sendo todas as outras coisas iguais

 
A100:

um ponteiro de função e um ponteiro de método simples têm uma assinatura diferente

como é um método estático diferente de uma função em termos de assinatura?

 
fxsaber:

Como é um método estático diferente de uma função em termos de assinatura?

osmétodos estáticos não são diferentes das funções quando a assinatura corresponde

 
A100:

osmétodos estáticos não são diferentes na assinatura das funções convencionais

Como é que isso é mau, então?

typedef void (*fn)();

void g() { Print(__FUNCSIG__); }

struct A
{
  static fn f;
};
static fn A::f = g;

struct B : A
{
  static void f() { Print(__FUNCSIG__); }
  
  void A100() { this.f = this.f; } // по смыслу ничем не отличается от A::f = B::f
};

void OnStart()
{
  B b;
  
  b.f(); // void g()
  
  b.A100();
  
  b.f(); // void g()
}
O meu ponto de vista é que tais passatempos conduzem a ambigüidades. Que só são úteis como um dos testes de língua nas entrevistas de emprego.
 
fxsaber:

O que há de errado com isso, então?

O meu ponto de vista é que tais passatempos conduzem a ambigüidades. O que só é útil como um dos testes de compreensão da língua em entrevistas de emprego.
O mau é que em C++ o resultado será diferente
 
A100:
O mau é que em C++ o resultado será diferente

Portanto, também não se justifica.

 
fxsaber:

O que é isso?


Após seleccionar "Guardar Versão", os parâmetros actuais são guardados na lista MT incorporada, que pode ser utilizada a partir do menu "Carregar Versão". A lista é diferente para cada EA.