Currently the code in eclhelper_base.hpp is structured so that the entire base classes are compiled into each query. The main reason is so that if selectInterface() is called it calls the function that was defined at query compile time - so that new interfaces can be transparently be added to helpers without causing recompiling.
However it has several disadvantages
- code in the platform that uses it needs to include the header file within a namespace.
- the generated queries are much larger since they contain all the class definitions, rather than calling code in another dll
Now that we have adopted the model that point releases never require code to be recompiled, and minor releases often do, the need for this is significantly reduced.
Suggestion is to
- change the classes so they are exported from eclrtl rather than inline
- move the virtual functions and constructors so they are defined in eclhelper_base.cpp - reducing generated code size, and compile time
- possibly add a new getHelperFlags() function to the base helper to provide an alternative way of extending interfaces without requiring recompilation. It could also be used for any flags that are common to all activities.