首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++中类似C#的事件,组合

C++中类似C#的事件,组合
EN

Stack Overflow用户
提问于 2010-12-16 21:13:27
回答 5查看 2.1K关注 0票数 3

在过去的几个月里,我一直在使用C#,并且已经习惯了事件和代理。在您的类中使用组合非常容易,只需使用事件从组件中获取消息即可。现在我正试着用C++做类似的事情,但我不知道该怎么做。

在C++中,合成是如何完成的?我唯一想到的办法就是继承...你从这个类派生并重写它的函数来接收它的输入吗?有没有其他更简单(更好)的方法?

为了进一步解释..。

我想写一个像这样的可重用组件...

代码语言:javascript
运行
复制
public delegate void OnDataReceivedHanlder(byte[] data);
public class TcpConnection
{
    public void Connect(string iP, ushort port);
    public void Send(byte[] data);
    public event OnDataReceivedHandler OnDataReceived;    
}

在C++中...

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-12-16 21:24:03

通常,您将为此使用继承(动态或静态)。或者,您可以只使用std::function< return(args..) >,它可以绑定到许多备选方案,如函数对象、函数指针、lambda函数等。

票数 4
EN

Stack Overflow用户

发布于 2010-12-16 21:15:28

是的,看看boost::signals2吧。您可以使用boost信号将信号连接到多个插槽,就像C#中的事件一样。我链接的页面上的教程和示例应该是有帮助的。

票数 4
EN

Stack Overflow用户

发布于 2010-12-16 23:12:03

下面是与您的C#代码等效的代码:

代码语言:javascript
运行
复制
class TcpConnection
{
public:
    void Connect(const std::string& iP, unsigned port);
    void Send(const std::vector<unsinged char>& data);
    std::function<void (const std::vector<unsinged char>&)> OnDataReceived;
};

function和lambda函数是C#委托的C++0x (更强大的)等价物。如果您需要具有线程和纤程以及同步和异步事件处理程序的更复杂的多播工具,请查看GBL library (它还允许您以图形方式创建事件驱动的设计,并将为您生成C++代码,因此您不需要手动编写)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4461093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档