There is still an issue should be resolved before using `enum class`. If it could not be fixed, `enum class` will not make sense. The issue is:
```cpp
class Event
{
public:
    enum class Type
    {
        TOUCH = 1,
        KEYBOARD = 3,
        ACCELERATION,
        CUSTOM
    };
    
protected:
    /** Constructor */
    Event(Type type);
public:
    /** Destructor */
    virtual ~Event();

    /** Gets the event type */
	inline Type getType() const { return _type; };
...
Type _type;     ///< Event type
...
};
```
```cpp
EventCustom::EventCustom(const std::string& eventName)
: Event(std::hash<std::string>()(eventName))
, _userData(nullptr)
{
}
```
```cpp
class EventListener : public Object
{
public:
    enum class Type
    {
        TOUCH_ONE_BY_ONE = 1,
        TOUCH_ALL_AT_ONCE,
        KEYBOARD,
        ACCELERATION,
        CUSTOM
    };
```

```cpp
class EventDispatcher
{
    /** Listeners map */
    std::unordered_map<EventListener::Type, EventListenerVector*> _listeners;
    
    /** The map of dirty flag */
    std::unordered_map<EventListener::Type, DirtyFlag> _priorityDirtyFlagMap;
};
```

`Event::getType` will not get what's defined in enum class `Event::Type` since custom event should convert string to hash code which is the type.
The same problem appears in `EventListener::Type`.
Any suggestion?