错误、漏洞、问题 - 页 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:

一个函数指针和一个简单方法指针有不同的签名

在签名方面,静态方法与函数有什么不同?

 
fxsaber:

在签名方面,静态方法与函数有什么不同?

当签名匹配时,静态方法 与函数没有区别。

 
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:

那么,这有什么错呢?

我的观点是,这种爱好会导致模糊不清。这只是作为求职面试中语言理解力的测试之一,是有用的。
糟糕的是,在C++中,结果将是不同的
 
A100:
糟糕的是,在C++中,结果将是不同的

所以这也是没有道理的。

 
fxsaber:

它是什么?


选择 "保存版本 "后,当前参数被保存到内置的MT列表中,可以从 "加载版本 "菜单中使用。每个EA的清单是不同的。