If you want to keep your game code clean, don't ask for a "keyDown" of a "mouseMove", and certainly don't ask for a specific key like "A" of "Shift", it hard codes your input check inside the game code, and makes you dependant on only those input devices.
Instead, have a layer of key bindings which translates these events into game specific actions, like "MoveUp" or "Shoot".
My attempts to do this resulted in having a low level input system, a keybinding system and a high level input dispatcher. The low level system gathers input events from the OS (you can use it to filter only input specific SDL events) and prepares them for collection by a higher system. The keybinding system then collects these and transforms them into game specific actions (in your case, each SDL event would be mapped into one game action). Then the high level input dispatch sends these game actions to all game objects that were registered as input receivers.
My implementation is butt ugly, and i'm rewriting it, but it's the general idea that matters, where you do these three things in sequence as the "check input" part of the game loop.
And keep in mind that you really don't need singletons for any of this. If you need a single instance, create a single instance. If you need global access to it, think twice about why, and realise that you don't. :)