Listing 4: Base action class.
// Base action class
template <class T, class EV>
struct Action
{
virtual void operator()( const T&, const EV& ) throw() = 0;
};
// No Action default
template <class T, class EV>
struct NoAction : public Action<T,EV>
{
void operator()( const T&, const EV& ) throw() {};
};
// Action Handler for "T"
template <class T, class EV>
struct EventAction : public Action<T,EV>
{
typedef void (T::*HANDLE)( const EV& ev );
explicit EventAction( HANDLE hAction ) :
m_hAction(hAction) {}
void operator()( const T& _T, const EV& ev ) throw() {
(_T.*m_hAction)(ev);
}
private:
HANDLE m_hAction;
};