1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
5 <title>Class smart_library</title>
6 <link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
7 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
8 <link rel="home" href="../../../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
9 <link rel="up" href="../../../boost_dll/reference.html#header.boost.dll.smart_library_hpp" title="Header <boost/dll/smart_library.hpp>">
10 <link rel="prev" href="../load_mode/type.html" title="Type type">
11 <link rel="next" href="get_idm46262974368544.html" title="Function template get">
13 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14 <table cellpadding="2" width="100%"><tr>
15 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
16 <td align="center"><a href="../../../../../index.html">Home</a></td>
17 <td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
18 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
19 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
20 <td align="center"><a href="../../../../../more/index.htm">More</a></td>
23 <div class="spirit-nav">
24 <a accesskey="p" href="../load_mode/type.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../../boost_dll/reference.html#header.boost.dll.smart_library_hpp"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="get_idm46262974368544.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
26 <div class="refentry">
27 <a name="boost.dll.experimental.smart_library"></a><div class="titlepage"></div>
28 <div class="refnamediv">
29 <h2><span class="refentrytitle">Class smart_library</span></h2>
30 <p>boost::dll::experimental::smart_library — This class is an extension of <a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a>, which allows to load C++ symbols. </p>
32 <h2 xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv-title">Synopsis</h2>
33 <div xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv"><pre class="synopsis"><span class="comment">// In header: <<a class="link" href="../../../boost_dll/reference.html#header.boost.dll.smart_library_hpp" title="Header <boost/dll/smart_library.hpp>">boost/dll/smart_library.hpp</a>>
36 <span class="keyword">class</span> <a class="link" href="smart_library.html" title="Class smart_library">smart_library</a> <span class="special">{</span>
37 <span class="keyword">public</span><span class="special">:</span>
38 <span class="comment">// types</span>
39 <span class="keyword">typedef</span> <span class="emphasis"><em><span class="identifier">unspecified</span></em></span> <a name="boost.dll.experimental.smart_library.mangled_storage"></a><span class="identifier">mangled_storage</span><span class="special">;</span>
41 <span class="comment">// <a class="link" href="smart_library.html#boost.dll.experimental.smart_libraryconstruct-copy-destruct">construct/copy/destruct</a></span>
42 <a class="link" href="smart_library.html#idm46262974423584-bb"><span class="identifier">smart_library</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
43 <a class="link" href="smart_library.html#idm46262974420976-bb"><span class="identifier">smart_library</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span><span class="special">,</span>
44 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span>
45 <a class="link" href="smart_library.html#idm46262974416048-bb"><span class="identifier">smart_library</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span><span class="special">,</span>
46 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span>
47 <a class="link" href="smart_library.html#idm46262974409776-bb"><span class="identifier">smart_library</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span><span class="special">,</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span><span class="special">,</span>
48 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span><span class="special">)</span><span class="special">;</span>
49 <a class="link" href="smart_library.html#idm46262974406848-bb"><span class="identifier">smart_library</span></a><span class="special">(</span><span class="keyword">const</span> <a class="link" href="smart_library.html" title="Class smart_library">smart_library</a> <span class="special">&</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
50 <a class="link" href="smart_library.html#idm46262974401856-bb"><span class="identifier">smart_library</span></a><span class="special">(</span><a class="link" href="smart_library.html" title="Class smart_library">smart_library</a> <span class="special">&&</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
51 <span class="keyword">explicit</span> <a class="link" href="smart_library.html#idm46262974397024-bb"><span class="identifier">smart_library</span></a><span class="special">(</span><span class="keyword">const</span> <a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
52 <span class="keyword">explicit</span> <a class="link" href="smart_library.html#idm46262974391760-bb"><span class="identifier">smart_library</span></a><span class="special">(</span><a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&&</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
53 <a class="link" href="smart_library.html#idm46262974386656-bb"><span class="special">~</span><span class="identifier">smart_library</span></a><span class="special">(</span><span class="special">)</span><span class="special">;</span>
55 <span class="comment">// <a class="link" href="smart_library.html#idm46262974522544-bb">public member functions</a></span>
56 <span class="keyword">const</span> <a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> <a class="link" href="smart_library.html#idm46262974521984-bb"><span class="identifier">shared_lib</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
57 <span class="keyword">const</span> <span class="identifier">mangled_storage</span> <span class="special">&</span> <a class="link" href="smart_library.html#idm46262974519264-bb"><span class="identifier">symbol_storage</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
58 <span class="identifier">mangled_storage</span> <span class="special">&</span> <a class="link" href="smart_library.html#idm46262974516688-bb"><span class="identifier">symbol_storage</span></a><span class="special">(</span><span class="special">)</span><span class="special">;</span>
59 <span class="keyword">void</span> <a class="link" href="smart_library.html#idm46262974515536-bb"><span class="identifier">load</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span><span class="special">,</span>
60 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span>
61 <span class="keyword">void</span> <a class="link" href="smart_library.html#idm46262974509648-bb"><span class="identifier">load</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span><span class="special">,</span>
62 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span>
63 <span class="keyword">void</span> <a class="link" href="smart_library.html#idm46262974502416-bb"><span class="identifier">load</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span><span class="special">,</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span><span class="special">,</span>
64 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span><span class="special">)</span><span class="special">;</span>
65 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span> <span class="identifier">T</span> <span class="special">&</span> <a class="link" href="smart_library.html#idm46262974498928-bb"><span class="identifier">get_variable</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
66 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Func<span class="special">></span> <span class="identifier">Func</span> <span class="special">&</span> <a class="link" href="smart_library.html#idm46262974492576-bb"><span class="identifier">get_function</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
67 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Class<span class="special">,</span> <span class="keyword">typename</span> Func<span class="special">></span>
68 <span class="emphasis"><em><span class="identifier">unspecified</span></em></span> <a class="link" href="smart_library.html#idm46262974484768-bb"><span class="identifier">get_mem_fn</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
69 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Signature<span class="special">></span>
70 <span class="identifier">constructor</span><span class="special"><</span> <span class="identifier">Signature</span> <span class="special">></span> <a class="link" href="smart_library.html#idm46262974475616-bb"><span class="identifier">get_constructor</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
71 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Class<span class="special">></span> <span class="identifier">destructor</span><span class="special"><</span> <span class="identifier">Class</span> <span class="special">></span> <a class="link" href="smart_library.html#idm46262974469568-bb"><span class="identifier">get_destructor</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
72 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Class<span class="special">></span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span> <span class="special">&</span> <a class="link" href="smart_library.html#idm46262974463616-bb"><span class="identifier">get_type_info</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
73 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Alias<span class="special">></span> <span class="keyword">void</span> <a class="link" href="smart_library.html#idm46262974457680-bb"><span class="identifier">add_type_alias</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="special">)</span><span class="special">;</span>
74 <span class="keyword">void</span> <a class="link" href="smart_library.html#idm46262974451056-bb"><span class="identifier">unload</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
75 <span class="keyword">bool</span> <a class="link" href="smart_library.html#idm46262974447760-bb"><span class="identifier">is_loaded</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
76 <span class="keyword">bool</span> <a class="link" href="smart_library.html#idm46262974444624-bb"><span class="keyword">operator</span><span class="special">!</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
77 <span class="keyword">explicit</span> <a class="link" href="smart_library.html#idm46262974441488-bb"><span class="keyword">operator</span> <span class="keyword">bool</span></a><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
78 <span class="keyword">bool</span> <a class="link" href="smart_library.html#idm46262974439392-bb"><span class="identifier">has</span></a><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
79 <span class="keyword">bool</span> <a class="link" href="smart_library.html#idm46262974434704-bb"><span class="identifier">has</span></a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
80 <a class="link" href="smart_library.html" title="Class smart_library">smart_library</a> <span class="special">&</span> <a class="link" href="smart_library.html#idm46262974432352-bb"><span class="identifier">assign</span></a><span class="special">(</span><span class="keyword">const</span> <a class="link" href="smart_library.html" title="Class smart_library">smart_library</a> <span class="special">&</span><span class="special">)</span><span class="special">;</span>
81 <span class="keyword">void</span> <a class="link" href="smart_library.html#idm46262974427744-bb"><span class="identifier">swap</span></a><span class="special">(</span><a class="link" href="smart_library.html" title="Class smart_library">smart_library</a> <span class="special">&</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
82 <span class="special">}</span><span class="special">;</span></pre></div>
83 <div class="refsect1">
84 <a name="id-1.3.15.8.2.8.5.4"></a><h2>Description</h2>
85 <p>This class allows type safe loading of overloaded functions, member-functions, constructors and variables. It also allows to overwrite classes so they can be loaded, while being declared with different names.</p>
86 <div class="warning"><table border="0" summary="Warning">
88 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../doc/src/images/warning.png"></td>
89 <th align="left">Warning</th>
91 <tr><td align="left" valign="top"><p>Is still very experimental.</p></td></tr>
94 Currently known limitations:</p>
95 <p>Member functions must be defined outside of the class to be exported. That is: </p>
96 <pre class="programlisting"><span class="comment">//not exported:</span>
97 <span class="keyword">struct</span> <span class="identifier">BOOST_SYMBOL_EXPORT</span> <span class="identifier">my_class</span> <span class="special">{</span> <span class="keyword">void</span> <span class="identifier">func</span><span class="special">(</span><span class="special">)</span> <span class="special">{</span><span class="special">}</span><span class="special">}</span><span class="special">;</span>
98 <span class="comment">//exported</span>
99 <span class="keyword">struct</span> <span class="identifier">BOOST_SYMBOL_EXPORT</span> <span class="identifier">my_class</span> <span class="special">{</span> <span class="keyword">void</span> <span class="identifier">func</span><span class="special">(</span><span class="special">)</span><span class="special">;</span><span class="special">}</span><span class="special">;</span>
100 <span class="keyword">void</span> <span class="identifier">my_class</span><span class="special">::</span><span class="identifier">func</span><span class="special">(</span><span class="special">)</span> <span class="special">{</span><span class="special">}</span><span class="special">;</span>
102 <p>With the current analysis, the first version does get exported in MSVC. MinGW also does export it, BOOST_SYMBOL_EXPORT is written before it. To allow this on windows one can use BOOST_DLL_MEMBER_EXPORT for this, so that MinGW and MSVC can provide those functions. This does however not work with gcc on linux.</p>
103 <p>Direct initialization of members. On linux the following member variable i will not be initialized when using the allocating constructor: </p>
104 <pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">BOOST_SYMBOL_EXPORT</span> <span class="identifier">my_class</span> <span class="special">{</span> <span class="keyword">int</span> <span class="identifier">i</span><span class="special">;</span> <span class="identifier">my_class</span><span class="special">(</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">i</span><span class="special">(</span><span class="number">42</span><span class="special">)</span> <span class="special">{</span><span class="special">}</span> <span class="special">}</span><span class="special">;</span>
106 <p>This does however not happen when the value is set inside the constructor function. </p>
107 <div class="refsect2">
108 <a name="id-1.3.15.8.2.8.5.4.8"></a><h3>
109 <a name="boost.dll.experimental.smart_libraryconstruct-copy-destruct"></a><code class="computeroutput">smart_library</code>
111 construct/copy/destruct</h3>
112 <div class="orderedlist"><ol class="orderedlist" type="1">
113 <li class="listitem">
114 <pre class="literallayout"><a name="idm46262974423584-bb"></a><span class="identifier">smart_library</span><span class="special">(</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
115 <p>Creates in anstance that does not reference any DLL/DSO.</p>
119 <div class="variablelist"><table border="0" class="variablelist compact">
121 <col align="left" valign="top">
126 <td><p><span class="term">Postconditions:</span></p></td>
127 <td><p>this->is_loaded() returns false. </p></td>
130 <td><p><span class="term">Throws:</span></p></td>
136 <li class="listitem">
137 <pre class="literallayout"><a name="idm46262974420976-bb"></a><span class="identifier">smart_library</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span> lib_path<span class="special">,</span>
138 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> mode <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span></pre>
139 <p>Loads a library by specified path with a specified mode.</p>
143 <div class="variablelist"><table border="0" class="variablelist compact">
145 <col align="left" valign="top">
150 <td><p><span class="term">Parameters:</span></p></td>
151 <td><div class="variablelist"><table border="0" class="variablelist compact">
153 <col align="left" valign="top">
158 <td><p><span class="term"><code class="computeroutput">lib_path</code></span></p></td>
159 <td><p>Library file name. Can handle std::string, const char*, std::wstring, const wchar_t* or <a class="link" href="../fs/path.html" title="Type definition path">boost::dll::fs::path</a>. </p></td>
162 <td><p><span class="term"><code class="computeroutput">mode</code></span></p></td>
163 <td><p>A mode that will be used on library load. </p></td>
169 <td><p><span class="term">Throws:</span></p></td>
175 <li class="listitem">
176 <pre class="literallayout"><a name="idm46262974416048-bb"></a><span class="identifier">smart_library</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span> lib_path<span class="special">,</span>
177 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span> ec<span class="special">,</span>
178 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> mode <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span></pre>
179 <p>Loads a library by specified path with a specified mode.</p>
183 <div class="variablelist"><table border="0" class="variablelist compact">
185 <col align="left" valign="top">
190 <td><p><span class="term">Parameters:</span></p></td>
191 <td><div class="variablelist"><table border="0" class="variablelist compact">
193 <col align="left" valign="top">
198 <td><p><span class="term"><code class="computeroutput">ec</code></span></p></td>
199 <td><p>Variable that will be set to the result of the operation. </p></td>
202 <td><p><span class="term"><code class="computeroutput">lib_path</code></span></p></td>
203 <td><p>Library file name. Can handle std::string, const char*, std::wstring, const wchar_t* or <a class="link" href="../fs/path.html" title="Type definition path">boost::dll::fs::path</a>. </p></td>
206 <td><p><span class="term"><code class="computeroutput">mode</code></span></p></td>
207 <td><p>A mode that will be used on library load. </p></td>
213 <td><p><span class="term">Throws:</span></p></td>
214 <td>std::bad_alloc in case of insufficient memory. </td>
219 <li class="listitem">
220 <pre class="literallayout"><a name="idm46262974409776-bb"></a><span class="identifier">smart_library</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span> lib_path<span class="special">,</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> mode<span class="special">,</span>
221 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span> ec<span class="special">)</span><span class="special">;</span></pre>
222 <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
224 <li class="listitem">
225 <pre class="literallayout"><a name="idm46262974406848-bb"></a><span class="identifier">smart_library</span><span class="special">(</span><span class="keyword">const</span> <a class="link" href="smart_library.html" title="Class smart_library">smart_library</a> <span class="special">&</span> lib<span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
226 <p>copy a <code class="computeroutput"><a class="link" href="smart_library.html" title="Class smart_library">smart_library</a></code> object.</p>
230 <div class="variablelist"><table border="0" class="variablelist compact">
232 <col align="left" valign="top">
237 <td><p><span class="term">Parameters:</span></p></td>
238 <td><div class="variablelist"><table border="0" class="variablelist compact">
240 <col align="left" valign="top">
244 <td><p><span class="term"><code class="computeroutput">lib</code></span></p></td>
245 <td><p>A <code class="computeroutput"><a class="link" href="smart_library.html" title="Class smart_library">smart_library</a></code> to move from.</p></td>
250 <td><p><span class="term">Throws:</span></p></td>
256 <li class="listitem">
257 <pre class="literallayout"><a name="idm46262974401856-bb"></a><span class="identifier">smart_library</span><span class="special">(</span><a class="link" href="smart_library.html" title="Class smart_library">smart_library</a> <span class="special">&&</span> lib<span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
258 <p>Move a <code class="computeroutput"><a class="link" href="smart_library.html" title="Class smart_library">smart_library</a></code> object.</p>
262 <div class="variablelist"><table border="0" class="variablelist compact">
264 <col align="left" valign="top">
269 <td><p><span class="term">Parameters:</span></p></td>
270 <td><div class="variablelist"><table border="0" class="variablelist compact">
272 <col align="left" valign="top">
276 <td><p><span class="term"><code class="computeroutput">lib</code></span></p></td>
277 <td><p>A <code class="computeroutput"><a class="link" href="smart_library.html" title="Class smart_library">smart_library</a></code> to move from.</p></td>
282 <td><p><span class="term">Throws:</span></p></td>
288 <li class="listitem">
289 <pre class="literallayout"><span class="keyword">explicit</span> <a name="idm46262974397024-bb"></a><span class="identifier">smart_library</span><span class="special">(</span><span class="keyword">const</span> <a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> lib<span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
290 <p>Construct from a <code class="computeroutput"><a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a></code> object.</p>
294 <div class="variablelist"><table border="0" class="variablelist compact">
296 <col align="left" valign="top">
301 <td><p><span class="term">Parameters:</span></p></td>
302 <td><div class="variablelist"><table border="0" class="variablelist compact">
304 <col align="left" valign="top">
308 <td><p><span class="term"><code class="computeroutput">lib</code></span></p></td>
309 <td><p>A <code class="computeroutput"><a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a></code> to move from.</p></td>
314 <td><p><span class="term">Throws:</span></p></td>
320 <li class="listitem">
321 <pre class="literallayout"><span class="keyword">explicit</span> <a name="idm46262974391760-bb"></a><span class="identifier">smart_library</span><span class="special">(</span><a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&&</span> lib<span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
322 <p>Construct from a <code class="computeroutput"><a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a></code> object.</p>
326 <div class="variablelist"><table border="0" class="variablelist compact">
328 <col align="left" valign="top">
333 <td><p><span class="term">Parameters:</span></p></td>
334 <td><div class="variablelist"><table border="0" class="variablelist compact">
336 <col align="left" valign="top">
340 <td><p><span class="term"><code class="computeroutput">lib</code></span></p></td>
341 <td><p>A <code class="computeroutput"><a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a></code> to move from.</p></td>
346 <td><p><span class="term">Throws:</span></p></td>
352 <li class="listitem">
353 <pre class="literallayout"><a name="idm46262974386656-bb"></a><span class="special">~</span><span class="identifier">smart_library</span><span class="special">(</span><span class="special">)</span><span class="special">;</span></pre>
354 <p>Destroys the <code class="computeroutput"><a class="link" href="smart_library.html" title="Class smart_library">smart_library</a></code>. <code class="computeroutput">unload()</code> is called if the DLL/DSO was loaded. If library was loaded multiple times by different instances of <code class="computeroutput"><a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a></code>, the actual DLL/DSO won't be unloaded until there is at least one instance of <code class="computeroutput"><a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a></code>.</p>
357 <div class="variablelist"><table border="0" class="variablelist compact">
359 <col align="left" valign="top">
363 <td><p><span class="term">Throws:</span></p></td>
370 <div class="refsect2">
371 <a name="id-1.3.15.8.2.8.5.4.9"></a><h3>
372 <a name="idm46262974522544-bb"></a><code class="computeroutput">smart_library</code> public member functions</h3>
373 <div class="orderedlist"><ol class="orderedlist" type="1">
374 <li class="listitem">
375 <pre class="literallayout"><span class="keyword">const</span> <a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a> <span class="special">&</span> <a name="idm46262974521984-bb"></a><span class="identifier">shared_lib</span><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
376 <p>Get the underlying <code class="computeroutput"><a class="link" href="../shared_library.html" title="Class shared_library">shared_library</a></code> </p>
378 <li class="listitem">
379 <pre class="literallayout"><span class="keyword">const</span> <span class="identifier">mangled_storage</span> <span class="special">&</span> <a name="idm46262974519264-bb"></a><span class="identifier">symbol_storage</span><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
380 <p>Access to the mangled storage, which is created on construction.</p>
383 <div class="variablelist"><table border="0" class="variablelist compact">
385 <col align="left" valign="top">
389 <td><p><span class="term">Throws:</span></p></td>
394 <li class="listitem">
395 <pre class="literallayout"><span class="identifier">mangled_storage</span> <span class="special">&</span> <a name="idm46262974516688-bb"></a><span class="identifier">symbol_storage</span><span class="special">(</span><span class="special">)</span><span class="special">;</span></pre>Overload, for current development. </li>
396 <li class="listitem">
397 <pre class="literallayout"><span class="keyword">void</span> <a name="idm46262974515536-bb"></a><span class="identifier">load</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span> lib_path<span class="special">,</span>
398 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> mode <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span></pre>
399 <p>Loads a library by specified path with a specified mode.</p>
400 <p>Note that if some library is already loaded in this instance, load will call unload() and then load the new provided library.</p>
404 <div class="variablelist"><table border="0" class="variablelist compact">
406 <col align="left" valign="top">
411 <td><p><span class="term">Parameters:</span></p></td>
412 <td><div class="variablelist"><table border="0" class="variablelist compact">
414 <col align="left" valign="top">
419 <td><p><span class="term"><code class="computeroutput">lib_path</code></span></p></td>
420 <td><p>Library file name. Can handle std::string, const char*, std::wstring, const wchar_t* or <a class="link" href="../fs/path.html" title="Type definition path">boost::dll::fs::path</a>. </p></td>
423 <td><p><span class="term"><code class="computeroutput">mode</code></span></p></td>
424 <td><p>A mode that will be used on library load. </p></td>
430 <td><p><span class="term">Throws:</span></p></td>
436 <li class="listitem">
437 <pre class="literallayout"><span class="keyword">void</span> <a name="idm46262974509648-bb"></a><span class="identifier">load</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span> lib_path<span class="special">,</span>
438 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span> ec<span class="special">,</span>
439 <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> mode <span class="special">=</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">default_mode</span><span class="special">)</span><span class="special">;</span></pre>
440 <p>Loads a library by specified path with a specified mode.</p>
441 <p>Note that if some library is already loaded in this instance, load will call unload() and then load the new provided library.</p>
445 <div class="variablelist"><table border="0" class="variablelist compact">
447 <col align="left" valign="top">
452 <td><p><span class="term">Parameters:</span></p></td>
453 <td><div class="variablelist"><table border="0" class="variablelist compact">
455 <col align="left" valign="top">
460 <td><p><span class="term"><code class="computeroutput">ec</code></span></p></td>
461 <td><p>Variable that will be set to the result of the operation. </p></td>
464 <td><p><span class="term"><code class="computeroutput">lib_path</code></span></p></td>
465 <td><p>Library file name. Can handle std::string, const char*, std::wstring, const wchar_t* or <a class="link" href="../fs/path.html" title="Type definition path">boost::dll::fs::path</a>. </p></td>
468 <td><p><span class="term"><code class="computeroutput">mode</code></span></p></td>
469 <td><p>A mode that will be used on library load. </p></td>
475 <td><p><span class="term">Throws:</span></p></td>
476 <td>std::bad_alloc in case of insufficient memory. </td>
481 <li class="listitem">
482 <pre class="literallayout"><span class="keyword">void</span> <a name="idm46262974502416-bb"></a><span class="identifier">load</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">path</span> <span class="special">&</span> lib_path<span class="special">,</span> <span class="identifier">load_mode</span><span class="special">::</span><span class="identifier">type</span> mode<span class="special">,</span>
483 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">dll</span><span class="special">::</span><span class="identifier">fs</span><span class="special">::</span><span class="identifier">error_code</span> <span class="special">&</span> ec<span class="special">)</span><span class="special">;</span></pre>
484 <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
486 <li class="listitem">
487 <pre class="literallayout"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> T<span class="special">></span> <span class="identifier">T</span> <span class="special">&</span> <a name="idm46262974498928-bb"></a><span class="identifier">get_variable</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span> name<span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
488 <p>Load a variable from the referenced library.</p>
489 <p>Unlinke shared_library::get this function will also load scoped variables, which also includes static class members.</p>
490 <div class="note"><table border="0" summary="Note">
492 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td>
493 <th align="left">Note</th>
495 <tr><td align="left" valign="top"><p>When mangled, MSVC will also check the type.</p></td></tr>
503 <div class="variablelist"><table border="0" class="variablelist compact">
505 <col align="left" valign="top">
510 <td><p><span class="term">Parameters:</span></p></td>
511 <td><div class="variablelist"><table border="0" class="variablelist compact">
513 <col align="left" valign="top">
517 <td><p><span class="term"><code class="computeroutput">name</code></span></p></td>
518 <td><p>Name of the variable </p></td>
523 <td><p><span class="term">Template Parameters:</span></p></td>
524 <td><div class="variablelist"><table border="0" class="variablelist compact">
526 <col align="left" valign="top">
530 <td><p><span class="term"><code class="computeroutput">T</code></span></p></td>
531 <td><p>Type of the variable </p></td>
536 <td><p><span class="term">Returns:</span></p></td>
537 <td><p>A reference to the variable of type T.</p></td>
540 <td><p><span class="term">Throws:</span></p></td>
546 <li class="listitem">
547 <pre class="literallayout"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Func<span class="special">></span> <span class="identifier">Func</span> <span class="special">&</span> <a name="idm46262974492576-bb"></a><span class="identifier">get_function</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span> name<span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
548 <p>Load a function from the referenced library.</p>
549 <p><span class="bold"><strong>Example:</strong></span> </p>
550 <pre class="programlisting"><span class="identifier">smart_library</span> <span class="identifier">lib</span><span class="special">(</span><span class="string">"test_lib.so"</span><span class="special">)</span><span class="special">;</span>
551 <span class="keyword">typedef</span> <span class="keyword">int</span> <span class="special">(</span><span class="special">&</span><span class="identifier">add_ints</span><span class="special">)</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">)</span><span class="special">;</span>
552 <span class="keyword">typedef</span> <span class="keyword">double</span> <span class="special">(</span><span class="special">&</span><span class="identifier">add_doubles</span><span class="special">)</span><span class="special">(</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">)</span><span class="special">;</span>
553 <span class="identifier">add_ints</span> <span class="identifier">f1</span> <span class="special">=</span> <span class="identifier">lib</span><span class="special">.</span><span class="identifier">get_function</span><span class="special"><</span><span class="keyword">int</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">)</span><span class="special">></span> <span class="special">(</span><span class="string">"func_name"</span><span class="special">)</span><span class="special">;</span>
554 <span class="identifier">add_doubles</span> <span class="identifier">f2</span> <span class="special">=</span> <span class="identifier">lib</span><span class="special">.</span><span class="identifier">get_function</span><span class="special"><</span><span class="keyword">double</span><span class="special">(</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">)</span><span class="special">></span><span class="special">(</span><span class="string">"func_name"</span><span class="special">)</span><span class="special">;</span>
556 <div class="note"><table border="0" summary="Note">
558 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td>
559 <th align="left">Note</th>
561 <tr><td align="left" valign="top"><p>When mangled, MSVC will also check the return type.</p></td></tr>
569 <div class="variablelist"><table border="0" class="variablelist compact">
571 <col align="left" valign="top">
576 <td><p><span class="term">Parameters:</span></p></td>
577 <td><div class="variablelist"><table border="0" class="variablelist compact">
579 <col align="left" valign="top">
583 <td><p><span class="term"><code class="computeroutput">name</code></span></p></td>
584 <td><p>Name of the function. </p></td>
589 <td><p><span class="term">Template Parameters:</span></p></td>
590 <td><div class="variablelist"><table border="0" class="variablelist compact">
592 <col align="left" valign="top">
596 <td><p><span class="term"><code class="computeroutput">Func</code></span></p></td>
597 <td><p>Type of the function, required for determining the overload </p></td>
602 <td><p><span class="term">Returns:</span></p></td>
603 <td><p>A reference to the function of type F.</p></td>
606 <td><p><span class="term">Throws:</span></p></td>
612 <li class="listitem">
613 <pre class="literallayout"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Class<span class="special">,</span> <span class="keyword">typename</span> Func<span class="special">></span>
614 <span class="emphasis"><em><span class="identifier">unspecified</span></em></span> <a name="idm46262974484768-bb"></a><span class="identifier">get_mem_fn</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span> name<span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
615 <p>Load a member-function from the referenced library.</p>
616 <p><span class="bold"><strong>Example</strong></span> (import class is MyClass, which is available inside the library and the host):</p>
617 <pre class="programlisting"><span class="identifier">smart_library</span> <span class="identifier">lib</span><span class="special">(</span><span class="string">"test_lib.so"</span><span class="special">)</span><span class="special">;</span>
619 <span class="keyword">typedef</span> <span class="keyword">int</span> <span class="identifier">MyClass</span><span class="special">(</span><span class="special">*</span><span class="identifier">func</span><span class="special">)</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span><span class="special">;</span>
620 <span class="keyword">typedef</span> <span class="keyword">int</span> <span class="identifier">MyClass</span><span class="special">(</span><span class="special">*</span><span class="identifier">func_const</span><span class="special">)</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
622 <span class="identifier">add_ints</span> <span class="identifier">f1</span> <span class="special">=</span> <span class="identifier">lib</span><span class="special">.</span><span class="identifier">get_mem_fn</span><span class="special"><</span><span class="identifier">MyClass</span><span class="special">,</span> <span class="keyword">int</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span><span class="special">></span> <span class="special">(</span><span class="string">"MyClass::function"</span><span class="special">)</span><span class="special">;</span>
623 <span class="identifier">add_doubles</span> <span class="identifier">f2</span> <span class="special">=</span> <span class="identifier">lib</span><span class="special">.</span><span class="identifier">get_mem_fn</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">MyClass</span><span class="special">,</span> <span class="keyword">double</span><span class="special">(</span><span class="keyword">double</span><span class="special">)</span><span class="special">></span><span class="special">(</span><span class="string">"MyClass::function"</span><span class="special">)</span><span class="special">;</span>
625 <div class="note"><table border="0" summary="Note">
627 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td>
628 <th align="left">Note</th>
630 <tr><td align="left" valign="top"><p>When mangled, MSVC will also check the return type.</p></td></tr>
638 <div class="variablelist"><table border="0" class="variablelist compact">
640 <col align="left" valign="top">
645 <td><p><span class="term">Parameters:</span></p></td>
646 <td><div class="variablelist"><table border="0" class="variablelist compact">
648 <col align="left" valign="top">
652 <td><p><span class="term"><code class="computeroutput">name</code></span></p></td>
653 <td><p>Name of the function. </p></td>
658 <td><p><span class="term">Template Parameters:</span></p></td>
659 <td><div class="variablelist"><table border="0" class="variablelist compact">
661 <col align="left" valign="top">
666 <td><p><span class="term"><code class="computeroutput">Class</code></span></p></td>
667 <td><p>The class the function is a member of. If Class is const, the function will be assumed as taking a const this-pointer. The same applies for volatile. </p></td>
670 <td><p><span class="term"><code class="computeroutput">Func</code></span></p></td>
671 <td><p>Signature of the function, required for determining the overload </p></td>
677 <td><p><span class="term">Returns:</span></p></td>
678 <td><p>A pointer to the member-function with the signature provided</p></td>
681 <td><p><span class="term">Throws:</span></p></td>
687 <li class="listitem">
688 <pre class="literallayout"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Signature<span class="special">></span> <span class="identifier">constructor</span><span class="special"><</span> <span class="identifier">Signature</span> <span class="special">></span> <a name="idm46262974475616-bb"></a><span class="identifier">get_constructor</span><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
689 <p>Load a constructor from the referenced library.</p>
690 <p><span class="bold"><strong>Example</strong></span> (import class is MyClass, which is available inside the library and the host):</p>
691 <pre class="programlisting"><span class="identifier">smart_library</span> <span class="identifier">lib</span><span class="special">(</span><span class="string">"test_lib.so"</span><span class="special">)</span><span class="special">;</span>
693 <span class="identifier">constructor</span><span class="special"><</span><span class="identifier">MyClass</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span> <span class="identifier">f1</span> <span class="special">=</span> <span class="identifier">lib</span><span class="special">.</span><span class="identifier">get_mem_fn</span><span class="special"><</span><span class="identifier">MyClass</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span><span class="special">></span><span class="special">(</span><span class="special">)</span><span class="special">;</span>
699 <div class="variablelist"><table border="0" class="variablelist compact">
701 <col align="left" valign="top">
706 <td><p><span class="term">Template Parameters:</span></p></td>
707 <td><div class="variablelist"><table border="0" class="variablelist compact">
709 <col align="left" valign="top">
713 <td><p><span class="term"><code class="computeroutput">Signature</code></span></p></td>
714 <td><p>Signature of the function, required for determining the overload. The return type is the class which this is the constructor of. </p></td>
719 <td><p><span class="term">Returns:</span></p></td>
720 <td><p>A constructor object.</p></td>
723 <td><p><span class="term">Throws:</span></p></td>
729 <li class="listitem">
730 <pre class="literallayout"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Class<span class="special">></span> <span class="identifier">destructor</span><span class="special"><</span> <span class="identifier">Class</span> <span class="special">></span> <a name="idm46262974469568-bb"></a><span class="identifier">get_destructor</span><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
731 <p>Load a destructor from the referenced library.</p>
732 <p><span class="bold"><strong>Example</strong></span> (import class is MyClass, which is available inside the library and the host):</p>
733 <pre class="programlisting"><span class="identifier">smart_library</span> <span class="identifier">lib</span><span class="special">(</span><span class="string">"test_lib.so"</span><span class="special">)</span><span class="special">;</span>
735 <span class="identifier">destructor</span><span class="special"><</span><span class="identifier">MyClass</span><span class="special">></span> <span class="identifier">f1</span> <span class="special">=</span> <span class="identifier">lib</span><span class="special">.</span><span class="identifier">get_mem_fn</span><span class="special"><</span><span class="identifier">MyClass</span><span class="special">></span><span class="special">(</span><span class="special">)</span><span class="special">;</span>
741 <div class="variablelist"><table border="0" class="variablelist compact">
743 <col align="left" valign="top">
748 <td><p><span class="term">Template Parameters:</span></p></td>
749 <td><div class="variablelist"><table border="0" class="variablelist compact">
751 <col align="left" valign="top">
755 <td><p><span class="term"><code class="computeroutput">Class</code></span></p></td>
756 <td><p>The class whose destructor shall be loaded </p></td>
761 <td><p><span class="term">Returns:</span></p></td>
762 <td><p>A destructor object.</p></td>
765 <td><p><span class="term">Throws:</span></p></td>
771 <li class="listitem">
772 <pre class="literallayout"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Class<span class="special">></span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span> <span class="special">&</span> <a name="idm46262974463616-bb"></a><span class="identifier">get_type_info</span><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
773 <p>Load the typeinfo of the given type.</p>
774 <p><span class="bold"><strong>Example</strong></span> (import class is MyClass, which is available inside the library and the host):</p>
775 <pre class="programlisting"><span class="identifier">smart_library</span> <span class="identifier">lib</span><span class="special">(</span><span class="string">"test_lib.so"</span><span class="special">)</span><span class="special">;</span>
777 <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span> <span class="special">&</span><span class="identifier">ti</span> <span class="special">=</span> <span class="identifier">lib</span><span class="special">.</span><span class="identifier">get_Type_info</span><span class="special"><</span><span class="identifier">MyClass</span><span class="special">></span><span class="special">(</span><span class="special">)</span><span class="special">;</span>
783 <div class="variablelist"><table border="0" class="variablelist compact">
785 <col align="left" valign="top">
790 <td><p><span class="term">Template Parameters:</span></p></td>
791 <td><div class="variablelist"><table border="0" class="variablelist compact">
793 <col align="left" valign="top">
797 <td><p><span class="term"><code class="computeroutput">Class</code></span></p></td>
798 <td><p>The class whose typeinfo shall be loaded </p></td>
803 <td><p><span class="term">Returns:</span></p></td>
804 <td><p>A reference to a type_info object.</p></td>
807 <td><p><span class="term">Throws:</span></p></td>
813 <li class="listitem">
814 <pre class="literallayout"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> Alias<span class="special">></span> <span class="keyword">void</span> <a name="idm46262974457680-bb"></a><span class="identifier">add_type_alias</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span> name<span class="special">)</span><span class="special">;</span></pre>
815 <p>This function can be used to add a type alias.</p>
816 <p>This is to be used, when a class shall be imported, which is not declared on the host side.</p>
818 <pre class="programlisting"><span class="identifier">smart_library</span> <span class="identifier">lib</span><span class="special">(</span><span class="string">"test_lib.so"</span><span class="special">)</span><span class="special">;</span>
820 <span class="identifier">lib</span><span class="special">.</span><span class="identifier">add_type_alias</span><span class="special"><</span><span class="identifier">MyAlias</span><span class="special">></span><span class="special">(</span><span class="string">"MyClass"</span><span class="special">)</span><span class="special">;</span> <span class="comment">//when using MyAlias, the library will look for MyClass</span>
822 <span class="comment">//get the destructor of MyClass</span>
823 <span class="identifier">destructor</span><span class="special"><</span><span class="identifier">MyAlias</span><span class="special">></span> <span class="identifier">dtor</span> <span class="special">=</span> <span class="identifier">lib</span><span class="special">.</span><span class="identifier">get_destructor</span><span class="special"><</span><span class="identifier">MyAlias</span><span class="special">></span><span class="special">(</span><span class="special">)</span><span class="special">;</span>
827 <div class="note"><table border="0" summary="Note">
829 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td>
830 <th align="left">Note</th>
832 <tr><td align="left" valign="top"><p>If the alias-type is not large enough for the imported class, it will result in undefined behaviour. </p></td></tr>
836 <div class="warning"><table border="0" summary="Warning">
838 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../doc/src/images/warning.png"></td>
839 <th align="left">Warning</th>
841 <tr><td align="left" valign="top"><p>The alias will only be applied for the type signature, it will not replace the token in the scoped name. </p></td></tr>
845 <div class="variablelist"><table border="0" class="variablelist compact">
847 <col align="left" valign="top">
851 <td><p><span class="term">Parameters:</span></p></td>
852 <td><div class="variablelist"><table border="0" class="variablelist compact">
854 <col align="left" valign="top">
858 <td><p><span class="term"><code class="computeroutput">name</code></span></p></td>
859 <td><p>Name of the class the alias is for.</p></td>
865 <li class="listitem">
866 <pre class="literallayout"><span class="keyword">void</span> <a name="idm46262974451056-bb"></a><span class="identifier">unload</span><span class="special">(</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
867 <p>Unloads a shared library. If library was loaded multiple times by different instances, the actual DLL/DSO won't be unloaded until there is at least one instance that references the DLL/DSO.</p>
871 <div class="variablelist"><table border="0" class="variablelist compact">
873 <col align="left" valign="top">
878 <td><p><span class="term">Postconditions:</span></p></td>
879 <td><p>this->is_loaded() returns false. </p></td>
882 <td><p><span class="term">Throws:</span></p></td>
888 <li class="listitem">
889 <pre class="literallayout"><span class="keyword">bool</span> <a name="idm46262974447760-bb"></a><span class="identifier">is_loaded</span><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
890 <p>Check if an library is loaded.</p>
894 <div class="variablelist"><table border="0" class="variablelist compact">
896 <col align="left" valign="top">
901 <td><p><span class="term">Returns:</span></p></td>
902 <td><p>true if a library has been loaded. </p></td>
905 <td><p><span class="term">Throws:</span></p></td>
911 <li class="listitem">
912 <pre class="literallayout"><span class="keyword">bool</span> <a name="idm46262974444624-bb"></a><span class="keyword">operator</span><span class="special">!</span><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
913 <p>Check if an library is not loaded.</p>
917 <div class="variablelist"><table border="0" class="variablelist compact">
919 <col align="left" valign="top">
924 <td><p><span class="term">Returns:</span></p></td>
925 <td><p>true if a library has not been loaded. </p></td>
928 <td><p><span class="term">Throws:</span></p></td>
934 <li class="listitem">
935 <pre class="literallayout"><span class="keyword">explicit</span> <a name="idm46262974441488-bb"></a><span class="keyword">operator</span> <span class="keyword">bool</span><span class="special">(</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>bool() const <p>bool() const </p>
937 <li class="listitem">
938 <pre class="literallayout"><span class="keyword">bool</span> <a name="idm46262974439392-bb"></a><span class="identifier">has</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span> symbol_name<span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
939 <p>Search for a given symbol on loaded library. Works for all symbols, including alias names.</p>
944 <div class="variablelist"><table border="0" class="variablelist compact">
946 <col align="left" valign="top">
951 <td><p><span class="term">Parameters:</span></p></td>
952 <td><div class="variablelist"><table border="0" class="variablelist compact">
954 <col align="left" valign="top">
958 <td><p><span class="term"><code class="computeroutput">symbol_name</code></span></p></td>
959 <td><p>Null-terminated symbol name. Can handle std::string, char*, const char*. </p></td>
964 <td><p><span class="term">Returns:</span></p></td>
965 <td><p><code class="computeroutput">true</code> if the loaded library contains a symbol with a given name. </p></td>
968 <td><p><span class="term">Throws:</span></p></td>
974 <li class="listitem">
975 <pre class="literallayout"><span class="keyword">bool</span> <a name="idm46262974434704-bb"></a><span class="identifier">has</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&</span> symbol_name<span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
976 <p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
978 <li class="listitem">
979 <pre class="literallayout"><a class="link" href="smart_library.html" title="Class smart_library">smart_library</a> <span class="special">&</span> <a name="idm46262974432352-bb"></a><span class="identifier">assign</span><span class="special">(</span><span class="keyword">const</span> <a class="link" href="smart_library.html" title="Class smart_library">smart_library</a> <span class="special">&</span> lib<span class="special">)</span><span class="special">;</span></pre>
980 <p>Makes *this share the same shared object as lib. If *this is loaded, then unloads it.</p>
985 <div class="variablelist"><table border="0" class="variablelist compact">
987 <col align="left" valign="top">
992 <td><p><span class="term">Parameters:</span></p></td>
993 <td><div class="variablelist"><table border="0" class="variablelist compact">
995 <col align="left" valign="top">
999 <td><p><span class="term"><code class="computeroutput">lib</code></span></p></td>
1000 <td><p>A library instance to assign from. </p></td>
1005 <td><p><span class="term">Postconditions:</span></p></td>
1006 <td><p>lib.location() == this->location() </p></td>
1009 <td><p><span class="term">Throws:</span></p></td>
1015 <li class="listitem">
1016 <pre class="literallayout"><span class="keyword">void</span> <a name="idm46262974427744-bb"></a><span class="identifier">swap</span><span class="special">(</span><a class="link" href="smart_library.html" title="Class smart_library">smart_library</a> <span class="special">&</span> rhs<span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></pre>
1017 <p>Swaps two libraries. Does not invalidate existing symbols and functions loaded from libraries.</p>
1021 <div class="variablelist"><table border="0" class="variablelist compact">
1023 <col align="left" valign="top">
1028 <td><p><span class="term">Parameters:</span></p></td>
1029 <td><div class="variablelist"><table border="0" class="variablelist compact">
1031 <col align="left" valign="top">
1035 <td><p><span class="term"><code class="computeroutput">rhs</code></span></p></td>
1036 <td><p>Library to swap with. </p></td>
1041 <td><p><span class="term">Throws:</span></p></td>
1051 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
1052 <td align="left"></td>
1053 <td align="right"><div class="copyright-footer">Copyright © 2014 Renato Tegon Forti, Antony Polukhin<br>Copyright © 2015 Antony Polukhin<br>Copyright © 2016 Antony Polukhin, Klemens Morgenstern<br>Copyright © 2017-2019 Antony Polukhin<p>
1054 Distributed under the Boost Software License, Version 1.0. (See accompanying
1055 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
1060 <div class="spirit-nav">
1061 <a accesskey="p" href="../load_mode/type.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../../../boost_dll/reference.html#header.boost.dll.smart_library_hpp"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="get_idm46262974368544.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>