Exercises: Add plugin system task

This commit is contained in:
Alex Hirsch 2020-11-19 23:47:47 +01:00
parent 5d850c2d9d
commit 9039c95690
2 changed files with 46 additions and 0 deletions

View File

@ -224,3 +224,30 @@ Take your vector implementation from Task 14 and instantiate it with a big numbe
Inspect the relationship between the number of unique instantiates and compile time. Inspect the relationship between the number of unique instantiates and compile time.
Furthermore, look at the compiled object file using `nm`. Furthermore, look at the compiled object file using `nm`.
## Task 16
In this task you have to create a rudimentary plugin system.
You are given `plugin.hpp` which contains an interface for your plugins, as well as the function name of the constructor function and its type.
Note that the constructor function returns an `std::unique_ptr<Plugin>`.
- create an executable which *dynamically* loads plugins and executes their `run` member function
- create two different plugins (`foo` and `bar`) showing off the plugin system
It could look like this:
$ ./main ./libFoo.so
Creation of first plugin
Running the first plugin
Destruction of first plugin
$ ./main ./libFoo.so ./libBar.so
Creation of first plugin
Running the first plugin
Destruction of first plugin
Creation of second plugin
Running the second plugin
Destruction of second plugin
*Hint:* Have a look at the related man-pages *dlopen(3)* and *dlsym(3)*.

View File

@ -0,0 +1,19 @@
#ifndef PLUGIN_HPP
#define PLUGIN_HPP
#include <memory>
/// Interface for plugins.
class Plugin {
public:
virtual void run() = 0;
virtual ~Plugin(){};
};
/// Symbol of the plugin constructor function.
const auto PLUGIN_CONSTRUCTOR = "create_plugin";
/// Type of the plugin constructor function.
using PLUGIN_CONSTRUCTOR_T = std::unique_ptr<Plugin> (*)();
#endif // PLUGIN_HPP