我正在寻找解决问题的方法。我找到了一个解决方法,但我觉得应该有一个更漂亮的方法来做到这一点。这是我的问题: 我有一个用C语言编写的IPC库。当收到消息时,它会调用一个回调函数。我在这个库上创建了一个包装类。收到消息后,包装器类应触发一个信号(我使用Qt是)。如您所知,成员函数不能是回调,所以在我的情况下,我在类外写了回调函数。现在我必须从回调函数发出一个信号,我知道的唯一方法是为发出信号的包装类创建一个公共方法,但是我不希望公开这个方法,我不能访问课外的受保护/私人成员。 谁有类似的问题?你是怎么解决的?
由于
答案 0 :(得分:2)
如果你想把成员函数作为'回调',你可以在类中将该函数声明为'static'。
答案 1 :(得分:2)
答案 2 :(得分:1)
好吧,成员函数可以成为一个回调,还有一些额外的工作。这就是所谓的“委托”。您可以尝试boost::bind
/ boost::mem_fn
。也许其他一些图书馆会更方便/更有帮助,例如boost.lambda(我没试过)。
答案 3 :(得分:0)
std :: mem_fun和Vlad指出的做法相同。让朋友认为不是一个好的设计,因为你暴露了所有的内部内部,甚至可以在没有成员的情况下访问。
静态方法将无法发出信号,但它可以访问指向您的类的另一个静态成员。你可以创建一个特殊的“调用者”类,将一个静态指针存储到你的Qt对象。
你可以拥有一个全局类指针,但它比拥有一个朋友更糟糕。你可以让你的类单例,但它在权衡中类似于全局变量,所以不值得一次使用。