繁体   English   中英

C ++,回调,对象和最佳实践

[英]C++, callbacks, objects and best practice

我正在寻找解决我的问题的方法。 我找到了解决方法,但我认为应该有一种更漂亮的方法。 这是我的问题:我有一个用C编写的IPC库。收到消息后,它将调用回调函数。 我在这个库上做了一个包装器类。 收到消息后,包装器类应触发一个信号(我使用的是Qt yes)。 如您所知,成员函数不能是回调,因此在我的情况下,我在类外部编写了该回调。 现在我必须从回调函数中发出信号,我知道的唯一方法是为包装器类创建一个公共方法,该方法将发出信号,但是我不想将该方法公开,因此我不能访问课外的受保护/私人成员。 有人有类似的问题吗? 您是如何解决的?

谢谢

如果希望成员函数为“回调”,则可以在类中将该函数声明为“静态”。

您可以将外部函数声明为该类的朋友,因此无需将该方法公开。

这里是教程的链接

按照评论的要求将Postet作为答案。

好吧,成员函数可以是回调,还有一些其他工作。 这就是所谓的“委托”。 您可以尝试boost::bind / boost::mem_fn 也许其他一些库会更方便/有用,例如boost.lambda (我没有尝试过)。

std :: mem_fun与Vlad指出的技巧相同。 交朋友被认为不是一个好的设计,因为您公开了所有类的内部组件,甚至都没有给成员打电话就可以访问。

静态方法将无法发出单数,但是它可以访问指向您的类的另一个静态成员。 您可以通过这种方式创建一个特殊的“调用程序”类,并存储指向您的Qt对象的单个静态指针。

您可以有一个全局类指针,但是它比拥有一个朋友还要糟糕。 您可以使类成为单例,但它的权衡取舍类似于全局变量,因此不值得一用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM