在过去的几个月里,我一直在使用C#,并且已经习惯了事件和代理。在您的类中使用组合非常容易,只需使用事件从组件中获取消息即可。现在我正试着用C++做类似的事情,但我不知道该怎么做。
在C++中,合成是如何完成的?我唯一想到的办法就是继承...你从这个类派生并重写它的函数来接收它的输入吗?有没有其他更简单(更好)的方法?
为了进一步解释..。
我想写一个像这样的可重用组件...
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++中...
发布于 2010-12-16 13:24:03
通常,您将为此使用继承(动态或静态)。或者,您可以只使用std::function< return(args..) >
,它可以绑定到许多备选方案,如函数对象、函数指针、lambda函数等。
发布于 2010-12-16 13:15:28
是的,看看boost::signals2吧。您可以使用boost信号将信号连接到多个插槽,就像C#中的事件一样。我链接的页面上的教程和示例应该是有帮助的。
发布于 2010-12-16 15:12:03
下面是与您的C#代码等效的代码:
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++代码,因此您不需要手动编写)。
https://stackoverflow.com/questions/4461093
复制