Skip to content

ros/class_loader

Repository files navigation

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.h in your source code
  • Instantiate a class_loader::ClassLoader object 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.

About

ROS-independent library for dynamic class (i.e. plugin) introspection and loading from runtime libraries

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 34