Errores, fallos, preguntas - página 2156

 
A100:

Depende de dónde - se necesita un ejemplo completo para responder a la pregunta

En cualquier lugar que encaje en el contexto. La entrada en sí misma me parece algo absurda, a pesar de su validez.

 
fxsaber:

En cualquier lugar que encaje en el contexto. La entrada en sí me parece algo absurda, a pesar de su validez.

Antes // la entrada es normal... después es absurdo.

 
A100:

Antes // la entrada es normal... después - absurdo

No veo nada absurdo en querer asignar un campo de función a un puntero a un 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:

No veo nada absurdo en querer asignar un puntero a un método a un campo de función

Lo que es absurdo es que el compilador no admite punteros a métodos simples, e incluso si lo hiciera, un puntero a un método simple y un puntero a una función simple tendrán una firma diferente, en igualdad de condiciones

 
A100:

un puntero de función y un puntero de método simple tienen una firma diferente

¿en qué se diferencia un método estático de una función en términos de firma?

 
fxsaber:

¿En qué se diferencia un método estático de una función en términos de firma?

losmétodos estáticos no son diferentes de las funciones cuando la firma coincide con

 
A100:

losmétodos estáticos no difieren en su firma de las funciones convencionales

¿Cómo es eso algo malo, entonces?

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()
}
Lo que quiero decir es que esas aficiones conducen a ambigüedades. Que sólo son útiles como una de las pruebas de idiomas en las entrevistas de trabajo.
 
fxsaber:

¿Qué hay de malo en eso, entonces?

Lo que quiero decir es que esas aficiones conducen a ambigüedades. Que sólo es útil como una de las pruebas de comprensión del lenguaje en las entrevistas de trabajo.
Lo malo es que en C++ el resultado será diferente
 
A100:
Lo malo es que en C++ el resultado será diferente

Así que tampoco está justificado.

 
fxsaber:

¿Qué es?


Tras seleccionar "Guardar versión", los parámetros actuales se guardan en la lista de MT incorporada, que puede utilizarse desde el menú "Cargar versión". La lista es diferente para cada EA.