Members of plugin::Plugin<Base>.
load
static void load( std::string const& sharedObjectName );
A thin forward to fedem::dso::DSOLoader::load(sharedObjectName). It exists so a host that only deals in one hierarchy can write Shape::load(...) instead of pulling in <dso/DSOLoader.hh> directly.
Loading the DSO runs its static initialisers, which is when the plugin's REGISTER objects insert their factories into this Base's catalog.
Parameters — sharedObjectName: a path or soname passed straight to dlopen (platform search rules apply).
Exceptions — fedem::exception::FileNotFound if the object cannot be loaded (carries the dlerror() string).
Note — this is only the single-argument form. For search directories, loadAll, environment-driven loading or signature checks, call the DSOLoader functions directly.
Shape::load( "./libCircle.so" );
Shape::load( "libCircle.so" ); // uses RPATH / LD_LIBRARY_PATH
catalog
static PluginCatalog<Base>& catalog();
Returns a reference to the single PluginCatalog<Base> for this hierarchy.
Declared by the template, defined by CREATECATALOG(Base) in one translation unit. The definition returns a function-local static, so the object is created on first use and shared by every caller — host and every loaded DSO alike.
if( Shape::catalog().contains( "Circle" ) )
/* ... */;
for( auto const& name : Shape::catalog().names() )
std::cout << name << '\n';
Equivalent forms: Shape::catalog(), plugin::Plugin<Shape>::catalog(), CATALOG(Shape).
Undefined reference at link time to plugin::Plugin<Shape>::catalog() means no translation unit ran CREATECATALOG(Shape).

