代码之家  ›  专栏  ›  技术社区  ›  Jacob G

C++/CLI和C语言,“铸造”函数给委托人,什么是独家新闻?

  •  3
  • Jacob G  · 技术社区  · 15 年前

    在C 2.0中,我可以执行以下操作:

    
    public class MyClass
    {
         delegate void MyDelegate(int myParam);
    
         public MyClass(OtherObject obj)
         {
    //THIS IS THE IMPORTANT PART
               obj.SomeCollection.Add((MyDelegate)MyFunction);
         }
    
         private void MyFunction(int myParam);
         {
               //...
         }
    }
    

    试图在C++/CLI中实现同样的事情,看来我必须这样做:

    
    MyDelegate del = gcnew MyDelegate(this, MyFunction);
    obj->SomeCollection->Add(del);
    

    显然,我也可以在C中创建一个新的委托实例,而不是上面所发生的事情。在C++世界中,是否存在某种允许C++运行的C++/CLI中不存在的魔法?某种神奇的匿名代表?谢谢。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Henk Holterman    15 年前

    在C++世界中是否存在某种不存在于C++中的魔法?

    对。从C 2开始,你可以简单地说:

      MyDelegate del = SomeFunction;
    

    编译器将其重写为long(c 1)形式:

     MyDelegate del = new MyDelegate (SomeFunction);
    

    C++/CLI中没有这种支持,但这只是一个符号差异。没什么大不了的。