Instead of the cumbersome config objects, pass along either an XML node or a file to the proper XML so that the specific system can read what it needs for configuration. This will allow the engine to be re-configured without recompiling as well as simplify the code tremendously. The EngineConfig.h object can have a list of all attributes for a particular node type and the specific system can just iterate over them for setup.
Instead of the cumbersome config objects, pass along either an XML node or a file to the proper XML so that the specific system can read what it needs for configuration. This will allow the engine to be re-configured without recompiling as well as simplify the code tremendously. The EngineConfig.h object can have a list of all attributes for a particular node type and the specific system can just iterate over them for setup.