【问题标题】:C++, callbacks, objects and best practiceC++、回调、对象和最佳实践
【发布时间】:2011-11-01 12:15:06
【问题描述】:

我正在寻找解决问题的方法。我找到了一种解决方法,但我觉得应该有一种更漂亮的方法来做到这一点。这是我的问题: 我有一个用 C 编写的 IPC 库。收到消息时,它会调用回调函数。我在这个库上做了一个包装类。收到消息后,包装类应该触发一个信号(我使用的是 Qt 是的)。如您所知,成员函数不能是回调,所以就我而言,我在类之外编写了该回调。现在我必须从回调函数发出一个信号,我知道的唯一方法是为将发出信号的包装类创建一个公共方法,但我不想让该方法公开,我不能访问类外的受保护/私有成员。 有人有类似的问题吗?你是怎么解决的?

谢谢

【问题讨论】:

  • 朋友功能不行吗,因为那时您不必公开您的方法? link
  • @Sim,请将您的评论发布为答案,以便我将其标记为答案:) 非常感谢,感谢您的帮助。

标签: c++ c qt callback


【解决方案1】:

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

这里是 link 教程。

Postet 作为 cmets 中要求的答案。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        std::mem_fun 的作用与 Vlad 指出的相同。交朋友被认为不是一个好的设计,因为您将所有类内部结构都暴露给可能访问,甚至无需调用成员。

        静态方法不能发出信号,但它可以访问另一个指向你的类的静态成员。你可以这样创建一个特殊的“调用者”类,存储一个指向 Qt 对象的静态指针。

        你可以拥有一个全局类指针,但这比拥有一个朋友还要糟糕。您可以将您的类设为单例,但它在权衡方面类似于全局变量,因此不值得仅用于一次。

        【讨论】:

          猜你喜欢
          • 2014-06-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-12
          • 2011-12-27
          相关资源
          最近更新 更多