用c ++代表

时间:2014-03-02 19:07:32

标签: c# c++ delegates

嘿我想在c ++中实现委托我知道如何在c#中发布我的代码但不知道如何将其转换为c ++

public class Events {
    public delegate void Action();
    public Action OnPrintTheText = delegate{};
}

public class ABC {
    private Event evt;
    public ABC() {
        evt  = new Event();
    }
    public void printText() {
        evt.OnPrintTheText();
    }
    public Event getEventHandler() {
        return evt;
    }
}
public class Drived {
    private ABC abc;

    public Drived() {
        abc = new ABC();
        abc.getEventHandle().OnPrintTheText += OnPrint;
    }
    ~Drived() {
        abc.getEventHandle().OnPrintTheText -= OnPrint;
    }
    public void OnPrint() {
        Debug.Log("ABC");
    }
}

现在,只要我调用printText,它就会自动调用Drived类的OnPrint(),所以无论如何都要将它实现到c ++?

2 个答案:

答案 0 :(得分:1)

C#在幕后做了很多管理。从广义上讲,C#中的委托是函数引用的容器。

在C ++中,您可以使用包装对象实例和类成员函数的成员函数的仿函数模板创建类似的委托,也可以创建一个包含函数的函数(对于非成员)。然后,您可以使用标准容器来维护仿函数实例的列表/数组/映射/等,这将为您提供C#委托的功能,并允许添加和删除“动作”(C#:+ =和 - =)。

请参阅我的回答here,了解如何为班级成员创建这样的模板化仿函数。非成员情况更简单,因为它不包装对象实例。

答案 1 :(得分:0)

看一下函数指针: http://www.newty.de/fpt/index.html

函数指针是一个指向特定函数的指针,基本上是一个委托。

看看这个: What is the difference between delegate in c# and function pointer in c++?