1// Copyright 2014 Renato Tegon Forti, Antony Polukhin.
2// Copyright Antony Polukhin, 2015-2024.
3//
4// Distributed under the Boost Software License, Version 1.0.
5// (See accompanying file LICENSE_1_0.txt
6// or copy at http://www.boost.org/LICENSE_1_0.txt)
7
8// MinGW related workaround
9#define BOOST_DLL_FORCE_ALIAS_INSTANTIATION
10
11//[plugcpp_on_unload
12#include <boost/dll/alias.hpp> // for BOOST_DLL_ALIAS
13#include <boost/function.hpp>
14#include <vector>
15
16namespace my_namespace {
17
18struct on_unload {
19 typedef boost::function<void()> callback_t;
20 typedef on_unload this_type;
21
22 ~on_unload() {
23 for (std::size_t i = 0; i < callbacks_.size(); ++i) {
24 callback_t& function = callbacks_[i];
25 function(); // calling the callback
26 }
27 }
28
29 // not thread safe
30 static void add(const callback_t& function) {
31 static this_type instance;
32 instance.callbacks_.push_back(x: function);
33 }
34
35private:
36 std::vector<callback_t> callbacks_;
37 on_unload() {} // prohibit construction outside of the `add` function
38};
39
40// Exporting the static "add" function with name "on_unload"
41BOOST_DLL_ALIAS(my_namespace::on_unload::add, on_unload)
42
43} // namespace my_namespace
44
45//]
46
47
48
49

source code of boost/libs/dll/example/tutorial6/on_unload_lib.cpp