68 lines
2.1 KiB
C
68 lines
2.1 KiB
C
|
#ifndef POLYMORPHIC_EVENT_H
|
||
|
#define POLYMORPHIC_EVENT_H
|
||
|
|
||
|
/** \file
|
||
|
Class definition file.
|
||
|
|
||
|
\copyright
|
||
|
Copyright (C) 2002, 2003 Oliver Schoenborn
|
||
|
|
||
|
This software is provided 'as-is', without
|
||
|
any express or implied warranty. In no event
|
||
|
will the authors be held liable for any
|
||
|
damages arising from the use of this
|
||
|
software.
|
||
|
|
||
|
You can redistribute it and/or modify it
|
||
|
under the terms found in the LICENSE file that
|
||
|
is included in the library distribution.
|
||
|
\endcopyright
|
||
|
*/
|
||
|
|
||
|
//#include "EventFWD.h"
|
||
|
|
||
|
/**
|
||
|
Derive your class from a PolymorphEvent to make it usable
|
||
|
polymorphically. This just requires that your event subclass then
|
||
|
define the send() pure virtual method, typically simply as
|
||
|
\code
|
||
|
struct ConcreteEvent: public PolymorphEvent
|
||
|
{
|
||
|
// ... your event-specific data and methods ...
|
||
|
// ... and the override:
|
||
|
virtual void send() const { sendTypedEvent(*this); }
|
||
|
};
|
||
|
\endcode
|
||
|
*/
|
||
|
class PolymorphEvent
|
||
|
{
|
||
|
public:
|
||
|
/** Causes this event to be sent out to all listeners. The
|
||
|
subclass must provide an override so the event can be used
|
||
|
polymorphically. This allows you to have a container
|
||
|
of PolymorphEvent's of unknown concrete types, e.g. to queue
|
||
|
events of different types.
|
||
|
*/
|
||
|
virtual void send() const = 0;
|
||
|
|
||
|
protected:
|
||
|
/// Need virtual destructor for polymorphic queues
|
||
|
virtual ~PolymorphEvent() {}
|
||
|
|
||
|
/**
|
||
|
The class derived from PolymorphEvent must override send()
|
||
|
to make it call EventSender<EvType>::send(). It can also
|
||
|
simply override it by making it call this method, sendTypedEvent,
|
||
|
with *this. This method is really just a helper to simplify the
|
||
|
syntax required for overriding send().
|
||
|
*/
|
||
|
template <typename EvType>
|
||
|
inline static void
|
||
|
sendTypedEvent(const EvType& event) {EventSender<EvType>::send(event);}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
#endif // POLYMORPHIC_EVENT_H
|