Ошибки, баги, вопросы - страница 2156

 
A100:

Смотря где - для ответа на вопрос требуется законченный пример

Да где угодно, где это вписывается в контекст. Сама запись мне видится несколько абсурдной, несмотря на ее валидность.

 
fxsaber:

Да где угодно, где это вписывается в контекст. Сама запись мне видится несколько абсурдной, несмотря на ее валидность.

До // запись нормальна... после - абсурдна

 
A100:

До // запись нормальна... после - абсурдна

Не вижу ничего абсурдного в желании присвоить полю-функции указатель на метод

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:

Не вижу ничего абсурдного в желании присвоить полю-функции указатель на метод

Абсурдность заключается в том что компилятор не поддерживает указатели на простые методы, а если бы и поддерживал - то указатель на обычную функцию и на простой метод при прочих равных условиях имеют разную сигнатуру

 
A100:

указатель на функцию и на простой метод имеют разную сигнатуру

static-метод чем по сигнатуре отличается от функции?

 
fxsaber:

static-метод чем по сигнатуре отличается от функции?

статические методы при совпадении сигнатуры не отличаются от обычных функций

 
A100:

статические методы по сигнатуре не отличаются от обычных функций

Тогда чем это плохо?

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()
}
Клоню к тому, что подобные увлечения приводят к неоднозначностям. Которые полезны разве что в качестве одного из тестов на понимание языка на собеседованиях.
 
fxsaber:

Тогда чем это плохо?

Клоню к тому, что подобные увлечения приводят к неоднозначностям. Которые полезны разве что в качестве одного из тестов на понимание языка на собеседованиях.
Плохо тем что в С++ будет другой результат
 
A100:
Плохо тем что в С++ будет другой результат

Так и он не обоснован.

 
fxsaber:

Что это такое?


После выбора "Сохранить версию" текущие параметры сохраняются во встроенный список МТ, которым можно пользоваться из меню "Загрузить версию". Список свой для каждого советника. 

Причина обращения: