It would help to know what you mean by ‘device’. If you’re really sure of your interface, you’d be able to come up with a general editor class that can construct itself based on an XML script.
It depends on the kind of components the editors may need, and the sort of functions they may wish to call. If by ‘device’ you mean some kind of hardware that would need specific functions called for it, or some special kind of conversion functions or what have you, then you will of course need to have extra code for each device editor.
If not though, and each editor will merely be some kind of interface panel for changing different settings in different ways specific to some other kind of whatever-it-is, then this approach could work. Your editors would be created by a generic editor, which will process an XML editor layout file and create the appropriate widgets in the layout specified. These components would be designed for general applications such that their behaviour can be customised according to a script. Each could then be given the ability to register with a particular parameter within the program, or perhaps to dump their edited values to an xml state to then be processed by the program.
My MidiPanelDesigner program for example, has Parameter objects (which hold details on a parameter in a piece of MIDI hardware, and the type of message it uses), ControlPanel objects, which hold arrangements of ControlWidget objects, which are in turn linked to Parameter objects. The control widgets set the values of the parameters, and the program responds to these value changes by sending MIDI to a device. The layout of the control panel is stored as XML, with the control widgets linked to the parameters by unique ID, and various other settings (a panel title, text boxes on the panels, different types of control widget etc…) stored too. That means that a different synth device editor can be loaded up, arranging the stored controls, linking them to their parameters etc… and becoming active for the program to respond to. You could make a dedicated editor program to create these editors (in my case, the program IS the editor too).
But, like i said, you may need to have each editor call specific functions which could be unknown at the time of building the main user application. It does depend on the type of ‘device’ you are talking about.