简介
利用宏和模版实现简单的值修改,触发信号,调用指定函数,可以参考学习以及自行扩展,造轮子。
源码
#include <vector>
#include <iostream>
using namespace std;
template<typename T1>
class slotbase
{
public:
virtual void Execute(T1 para) = 0;
};
template<typename T, typename T1>
class slotimpl : public slotbase<T1>
{
public:
slotimpl(T* pObj, void (T::*pMemberFunc)(T1))
{
m_pObj = pObj;
m_pMemberFunc = pMemberFunc;
}
virtual void Execute(T1 para)
{
(m_pObj->*m_pMemberFunc)(para);
}
private:
T* m_pObj;
void (T::*m_pMemberFunc)(T1);
};
template<typename T1>
class slot
{
public:
template<typename T>
slot(T* pObj, void (T::*pMemberFunc)(T1))
{
m_pSlotbase = new slotimpl<T, T1>(pObj, pMemberFunc);
}
~slot()
{
delete m_pSlotbase;
}
void Execute(T1 para)
{
m_pSlotbase->Execute(para);
}
private:
slotbase<T1>* m_pSlotbase;
}