C++ API
class_loader
 The class_loader package is a ROS-independent package for loading plugins during runtime and the foundation of the higher level ROS pluginlib library. class_loader utilizes the host operating system’s runtime loader to open runtime libraries (e.g. .so/.dll/dylib files), introspect the library for exported plugin classes, and allows users to instantiate objects of said exported classes without the explicit declaration (i.e. header file) for those classes.
class_loader VS pluginlib
class_loader is used in the implementation of the higher-level ROS package pluginlib which is the encouraged method for loading plugins in the ROS ecosystem. You should use class_loader when creating plugins intended for non-ROS packages and pluginlib when exporting plugins to ROS packages.
Quality Declaration
This package claims to be in the Quality Level 1 category, see the Quality Declaration for more details.
Usage
The interface is provided through two classes, class_loader::ClassLoader and class_loader::MultiLibraryClassLoader. Both provide similar interfaces but the former only binds to a single runtime library whereas the latter can associate with multiple libraries. The typical workflow is as follows:
- Include - class_loader/class_loader.hin your source code
- Instantiate a - class_loader::ClassLoaderobject passing the path and name of the library to open- class_loader::ClassLoader loader("libMyLibrary.so"); 
- Query the class for exported classes which have an interface defined by some base class (MyBase in the example) - std::vector<std::string> classes = loader.getAvailableClasses<MyBase>() 
- Create/destroy objects of said exported classes - for(unsigned int c = 0; c < classes.size(); ++c) { boost::shared_ptr<MyBase> plugin = loader.createInstance<MyBase>(classes[c]); plugin->someMethod(); //'plugin' will automatically be deleted when it goes out of scope } 
- Destroy the ClassLoader object to shutdown the library. 
Example: Basic Workflow for ClassLoader
#include <class_loader/class_loader.h>
#include "MyBase.h" //Defines class MyBase
int main()
{
  class_loader::ClassLoader loader("libMyLibrary.so");
  std::vector<std::string> classes = loader.getAvailableClasses<MyBase>();
  for(unsigned int c = 0; c < classes.size(); ++c)
  {
    boost::shared_ptr<MyBase> plugin = loader.createInstance<MyBase>(classes[c]);
    plugin->someMethod();
  }
}
Visit the class_loader API documentation for a complete list of its main components.
Page Hierarchy
Class Hierarchy
- 
    - Namespace class_loader- Namespace class_loader::impl- Template Class AbstractMetaObject
- Class AbstractMetaObjectBase
- Template Class MetaObject
- Class MetaObjectGraveyardVector
 
- Class ClassLoader
- Class ClassLoaderException
- Class CreateClassException
- Class LibraryLoadException
- Class LibraryUnloadException
- Class MultiLibraryClassLoader
- Class NoClassLoaderExistsException
 
- Namespace class_loader::impl
 
- Namespace class_loader
File Hierarchy
- 
    - Directory include- Directory class_loader- File class_loader.hpp
- File class_loader_core.hpp
- File exceptions.hpp
- File meta_object.hpp
- File multi_library_class_loader.hpp
- File register_macro.hpp
- File visibility_control.hpp
 
 
- Directory class_loader
- File QUALITY_DECLARATION.md
- File README.md
 
- Directory include