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.

ParameterssharedObjectName: a path or soname passed straight to dlopen (platform search rules apply).

Exceptionsfedem::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).