Errori, bug, domande - pagina 2156

 
A100:

Dipende da dove - hai bisogno di un esempio completo per rispondere alla domanda

Ovunque si adatti al contesto. Trovo la voce in sé un po' assurda, nonostante la sua validità.

 
fxsaber:

Ovunque si adatti al contesto. La voce stessa mi sembra un po' assurda, nonostante la sua validità.

Prima // la voce è normale... dopo è assurdo.

 
A100:

Prima // la voce è normale... dopo è assurdo

Non vedo nulla di assurdo nel voler assegnare un campo di funzione a un puntatore a un metodo

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:

Non vedo nulla di assurdo nel voler assegnare un puntatore a un metodo a un campo di funzione

Ciò che è assurdo è che il compilatore non supporta i puntatori a metodi semplici, e anche se lo facesse, un puntatore a un metodo semplice e un puntatore a una funzione semplice avranno una firma diversa, a parità di altre condizioni

 
A100:

un puntatore a funzione e un puntatore a metodo semplice hanno una firma diversa

in che modo un metodo statico è diverso da una funzione in termini di firma?

 
fxsaber:

In che modo un metodo statico è diverso da una funzione in termini di firma?

Imetodi statici non sono diversi dalle funzioni quando la firma corrisponde

 
A100:

Imetodi statici non sono diversi nella firma dalle funzioni convenzionali

Come può essere una cosa negativa, allora?

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()
}
Il mio punto è che questi hobby portano ad ambiguità. Che sono utili solo come uno dei test linguistici nei colloqui di lavoro.
 
fxsaber:

Cosa c'è di sbagliato in questo, allora?

Il mio punto è che questi hobby portano ad ambiguità. Che è utile solo come uno dei test per la comprensione della lingua nei colloqui di lavoro.
La cosa brutta è che in C++ il risultato sarà diverso
 
A100:
La cosa brutta è che in C++ il risultato sarà diverso

Quindi non è nemmeno giustificato.

 
fxsaber:

Che cos'è?


Dopo aver selezionato "Save Version", i parametri attuali vengono salvati nella lista MT incorporata, che può essere utilizzata dal menu "Load Version". La lista è diversa per ogni EA.