绪论
作为计算机科学出生的学生,学习任何一门技术都要知其然并知其所以然。
qt信号与槽的机制用起来确实很丝滑,但是如果我们是框架的开发者,怎么去实现这个功能呢?
我的思考
要能够让一个对象发出动作时,另一个对象能够感受到并发出相应的动作,那么肯定要让另一个对象能感知到(无论是直接感知还是间接感知),我所想到的方法有以下几种。
-
回调方法:类中设置函数指针,当执行某一动作时,让该函数指针指向的函数也执行。
-
设置中间类:设置一个类专门用于实现两个函数的绑定,然后通过这个类来调用这两个函数,这样也能实现。
-
设置消息中间件:当一个类调用方法时,想发送一个消息,另一个类循环监听这个是否有消息,如果有则执行。
模拟实现函数回调
#include <string>
#include <iostream>
class KView;
class KButton
{
public:
KButton(const std::string& text) :m_text(text) {};
// 设置回调函数
void setCallback(KView* v, void (KView::* callback)(const std::string& text))
{
m_v = v;
m_callback = callback;
}