Imported Upstream version 1.72.0
[platform/upstream/boost.git] / doc / html / boost / dll / experimental / smart_library.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2 <html>
3 <head>
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 &lt;boost/dll/smart_library.hpp&gt;">
10 <link rel="prev" href="../load_mode/type.html" title="Type type">
11 <link rel="next" href="get_idm46262974368544.html" title="Function template get">
12 </head>
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>
21 </tr></table>
22 <hr>
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>
25 </div>
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 &#8212; 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>
31 </div>
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: &lt;<a class="link" href="../../../boost_dll/reference.html#header.boost.dll.smart_library_hpp" title="Header &lt;boost/dll/smart_library.hpp&gt;">boost/dll/smart_library.hpp</a>&gt;
34
35 </span>
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>
40
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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;&amp;</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">&amp;</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">&amp;&amp;</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>
54
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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</span><span class="special">)</span><span class="special">;</span>
65   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> T<span class="special">&gt;</span> <span class="identifier">T</span> <span class="special">&amp;</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">&amp;</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
66   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Func<span class="special">&gt;</span> <span class="identifier">Func</span> <span class="special">&amp;</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">&amp;</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
67   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Class<span class="special">,</span> <span class="keyword">typename</span> Func<span class="special">&gt;</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">&amp;</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
69   <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Signature<span class="special">&gt;</span> 
70     <span class="identifier">constructor</span><span class="special">&lt;</span> <span class="identifier">Signature</span> <span class="special">&gt;</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">&lt;</span><span class="keyword">typename</span> Class<span class="special">&gt;</span> <span class="identifier">destructor</span><span class="special">&lt;</span> <span class="identifier">Class</span> <span class="special">&gt;</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">&lt;</span><span class="keyword">typename</span> Class<span class="special">&gt;</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span> <span class="special">&amp;</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">&lt;</span><span class="keyword">typename</span> Alias<span class="special">&gt;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">
87 <tr>
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>
90 </tr>
91 <tr><td align="left" valign="top"><p>Is still very experimental.</p></td></tr>
92 </table></div>
93 <p>
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>
101 </pre>
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>
105 </pre>
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> 
110         public
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>
116 <p>
117
118 </p>
119 <div class="variablelist"><table border="0" class="variablelist compact">
120 <colgroup>
121 <col align="left" valign="top">
122 <col>
123 </colgroup>
124 <tbody>
125 <tr>
126 <td><p><span class="term">Postconditions:</span></p></td>
127 <td><p>this-&gt;is_loaded() returns false. </p></td>
128 </tr>
129 <tr>
130 <td><p><span class="term">Throws:</span></p></td>
131 <td>Nothing. </td>
132 </tr>
133 </tbody>
134 </table></div>
135 </li>
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">&amp;</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>
140 <p>
141
142 </p>
143 <div class="variablelist"><table border="0" class="variablelist compact">
144 <colgroup>
145 <col align="left" valign="top">
146 <col>
147 </colgroup>
148 <tbody>
149 <tr>
150 <td><p><span class="term">Parameters:</span></p></td>
151 <td><div class="variablelist"><table border="0" class="variablelist compact">
152 <colgroup>
153 <col align="left" valign="top">
154 <col>
155 </colgroup>
156 <tbody>
157 <tr>
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>
160 </tr>
161 <tr>
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>
164 </tr>
165 </tbody>
166 </table></div></td>
167 </tr>
168 <tr>
169 <td><p><span class="term">Throws:</span></p></td>
170 <td> </td>
171 </tr>
172 </tbody>
173 </table></div>
174 </li>
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">&amp;</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">&amp;</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>
180 <p>
181
182 </p>
183 <div class="variablelist"><table border="0" class="variablelist compact">
184 <colgroup>
185 <col align="left" valign="top">
186 <col>
187 </colgroup>
188 <tbody>
189 <tr>
190 <td><p><span class="term">Parameters:</span></p></td>
191 <td><div class="variablelist"><table border="0" class="variablelist compact">
192 <colgroup>
193 <col align="left" valign="top">
194 <col>
195 </colgroup>
196 <tbody>
197 <tr>
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>
200 </tr>
201 <tr>
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>
204 </tr>
205 <tr>
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>
208 </tr>
209 </tbody>
210 </table></div></td>
211 </tr>
212 <tr>
213 <td><p><span class="term">Throws:</span></p></td>
214 <td>std::bad_alloc in case of insufficient memory. </td>
215 </tr>
216 </tbody>
217 </table></div>
218 </li>
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">&amp;</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">&amp;</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>
223 </li>
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">&amp;</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>
227 <p>
228
229 </p>
230 <div class="variablelist"><table border="0" class="variablelist compact">
231 <colgroup>
232 <col align="left" valign="top">
233 <col>
234 </colgroup>
235 <tbody>
236 <tr>
237 <td><p><span class="term">Parameters:</span></p></td>
238 <td><div class="variablelist"><table border="0" class="variablelist compact">
239 <colgroup>
240 <col align="left" valign="top">
241 <col>
242 </colgroup>
243 <tbody><tr>
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>
246 </tr></tbody>
247 </table></div></td>
248 </tr>
249 <tr>
250 <td><p><span class="term">Throws:</span></p></td>
251 <td>Nothing. </td>
252 </tr>
253 </tbody>
254 </table></div>
255 </li>
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">&amp;&amp;</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>
259 <p>
260
261 </p>
262 <div class="variablelist"><table border="0" class="variablelist compact">
263 <colgroup>
264 <col align="left" valign="top">
265 <col>
266 </colgroup>
267 <tbody>
268 <tr>
269 <td><p><span class="term">Parameters:</span></p></td>
270 <td><div class="variablelist"><table border="0" class="variablelist compact">
271 <colgroup>
272 <col align="left" valign="top">
273 <col>
274 </colgroup>
275 <tbody><tr>
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>
278 </tr></tbody>
279 </table></div></td>
280 </tr>
281 <tr>
282 <td><p><span class="term">Throws:</span></p></td>
283 <td>Nothing. </td>
284 </tr>
285 </tbody>
286 </table></div>
287 </li>
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">&amp;</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>
291 <p>
292
293 </p>
294 <div class="variablelist"><table border="0" class="variablelist compact">
295 <colgroup>
296 <col align="left" valign="top">
297 <col>
298 </colgroup>
299 <tbody>
300 <tr>
301 <td><p><span class="term">Parameters:</span></p></td>
302 <td><div class="variablelist"><table border="0" class="variablelist compact">
303 <colgroup>
304 <col align="left" valign="top">
305 <col>
306 </colgroup>
307 <tbody><tr>
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>
310 </tr></tbody>
311 </table></div></td>
312 </tr>
313 <tr>
314 <td><p><span class="term">Throws:</span></p></td>
315 <td>Nothing. </td>
316 </tr>
317 </tbody>
318 </table></div>
319 </li>
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">&amp;&amp;</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>
323 <p>
324
325 </p>
326 <div class="variablelist"><table border="0" class="variablelist compact">
327 <colgroup>
328 <col align="left" valign="top">
329 <col>
330 </colgroup>
331 <tbody>
332 <tr>
333 <td><p><span class="term">Parameters:</span></p></td>
334 <td><div class="variablelist"><table border="0" class="variablelist compact">
335 <colgroup>
336 <col align="left" valign="top">
337 <col>
338 </colgroup>
339 <tbody><tr>
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>
342 </tr></tbody>
343 </table></div></td>
344 </tr>
345 <tr>
346 <td><p><span class="term">Throws:</span></p></td>
347 <td>Nothing. </td>
348 </tr>
349 </tbody>
350 </table></div>
351 </li>
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>
355 <p>
356 </p>
357 <div class="variablelist"><table border="0" class="variablelist compact">
358 <colgroup>
359 <col align="left" valign="top">
360 <col>
361 </colgroup>
362 <tbody><tr>
363 <td><p><span class="term">Throws:</span></p></td>
364 <td>Nothing. </td>
365 </tr></tbody>
366 </table></div>
367 </li>
368 </ol></div>
369 </div>
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">&amp;</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>
377 </li>
378 <li class="listitem">
379 <pre class="literallayout"><span class="keyword">const</span> <span class="identifier">mangled_storage</span> <span class="special">&amp;</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>
381 <p>
382 </p>
383 <div class="variablelist"><table border="0" class="variablelist compact">
384 <colgroup>
385 <col align="left" valign="top">
386 <col>
387 </colgroup>
388 <tbody><tr>
389 <td><p><span class="term">Throws:</span></p></td>
390 <td>Nothing. </td>
391 </tr></tbody>
392 </table></div>
393 </li>
394 <li class="listitem">
395 <pre class="literallayout"><span class="identifier">mangled_storage</span> <span class="special">&amp;</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">&amp;</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>
401 <p>
402
403 </p>
404 <div class="variablelist"><table border="0" class="variablelist compact">
405 <colgroup>
406 <col align="left" valign="top">
407 <col>
408 </colgroup>
409 <tbody>
410 <tr>
411 <td><p><span class="term">Parameters:</span></p></td>
412 <td><div class="variablelist"><table border="0" class="variablelist compact">
413 <colgroup>
414 <col align="left" valign="top">
415 <col>
416 </colgroup>
417 <tbody>
418 <tr>
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>
421 </tr>
422 <tr>
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>
425 </tr>
426 </tbody>
427 </table></div></td>
428 </tr>
429 <tr>
430 <td><p><span class="term">Throws:</span></p></td>
431 <td> </td>
432 </tr>
433 </tbody>
434 </table></div>
435 </li>
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">&amp;</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">&amp;</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>
442 <p>
443
444 </p>
445 <div class="variablelist"><table border="0" class="variablelist compact">
446 <colgroup>
447 <col align="left" valign="top">
448 <col>
449 </colgroup>
450 <tbody>
451 <tr>
452 <td><p><span class="term">Parameters:</span></p></td>
453 <td><div class="variablelist"><table border="0" class="variablelist compact">
454 <colgroup>
455 <col align="left" valign="top">
456 <col>
457 </colgroup>
458 <tbody>
459 <tr>
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>
462 </tr>
463 <tr>
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>
466 </tr>
467 <tr>
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>
470 </tr>
471 </tbody>
472 </table></div></td>
473 </tr>
474 <tr>
475 <td><p><span class="term">Throws:</span></p></td>
476 <td>std::bad_alloc in case of insufficient memory. </td>
477 </tr>
478 </tbody>
479 </table></div>
480 </li>
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">&amp;</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">&amp;</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>
485 </li>
486 <li class="listitem">
487 <pre class="literallayout"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> T<span class="special">&gt;</span> <span class="identifier">T</span> <span class="special">&amp;</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">&amp;</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">
491 <tr>
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>
494 </tr>
495 <tr><td align="left" valign="top"><p>When mangled, MSVC will also check the type.</p></td></tr>
496 </table></div>
497 <p>
498
499
500
501
502 </p>
503 <div class="variablelist"><table border="0" class="variablelist compact">
504 <colgroup>
505 <col align="left" valign="top">
506 <col>
507 </colgroup>
508 <tbody>
509 <tr>
510 <td><p><span class="term">Parameters:</span></p></td>
511 <td><div class="variablelist"><table border="0" class="variablelist compact">
512 <colgroup>
513 <col align="left" valign="top">
514 <col>
515 </colgroup>
516 <tbody><tr>
517 <td><p><span class="term"><code class="computeroutput">name</code></span></p></td>
518 <td><p>Name of the variable </p></td>
519 </tr></tbody>
520 </table></div></td>
521 </tr>
522 <tr>
523 <td><p><span class="term">Template Parameters:</span></p></td>
524 <td><div class="variablelist"><table border="0" class="variablelist compact">
525 <colgroup>
526 <col align="left" valign="top">
527 <col>
528 </colgroup>
529 <tbody><tr>
530 <td><p><span class="term"><code class="computeroutput">T</code></span></p></td>
531 <td><p>Type of the variable </p></td>
532 </tr></tbody>
533 </table></div></td>
534 </tr>
535 <tr>
536 <td><p><span class="term">Returns:</span></p></td>
537 <td><p>A reference to the variable of type T.</p></td>
538 </tr>
539 <tr>
540 <td><p><span class="term">Throws:</span></p></td>
541 <td> </td>
542 </tr>
543 </tbody>
544 </table></div>
545 </li>
546 <li class="listitem">
547 <pre class="literallayout"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Func<span class="special">&gt;</span> <span class="identifier">Func</span> <span class="special">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&lt;</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">&gt;</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">&lt;</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">&gt;</span><span class="special">(</span><span class="string">"func_name"</span><span class="special">)</span><span class="special">;</span>
555 </pre>
556 <div class="note"><table border="0" summary="Note">
557 <tr>
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>
560 </tr>
561 <tr><td align="left" valign="top"><p>When mangled, MSVC will also check the return type.</p></td></tr>
562 </table></div>
563 <p>
564
565
566
567
568 </p>
569 <div class="variablelist"><table border="0" class="variablelist compact">
570 <colgroup>
571 <col align="left" valign="top">
572 <col>
573 </colgroup>
574 <tbody>
575 <tr>
576 <td><p><span class="term">Parameters:</span></p></td>
577 <td><div class="variablelist"><table border="0" class="variablelist compact">
578 <colgroup>
579 <col align="left" valign="top">
580 <col>
581 </colgroup>
582 <tbody><tr>
583 <td><p><span class="term"><code class="computeroutput">name</code></span></p></td>
584 <td><p>Name of the function. </p></td>
585 </tr></tbody>
586 </table></div></td>
587 </tr>
588 <tr>
589 <td><p><span class="term">Template Parameters:</span></p></td>
590 <td><div class="variablelist"><table border="0" class="variablelist compact">
591 <colgroup>
592 <col align="left" valign="top">
593 <col>
594 </colgroup>
595 <tbody><tr>
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>
598 </tr></tbody>
599 </table></div></td>
600 </tr>
601 <tr>
602 <td><p><span class="term">Returns:</span></p></td>
603 <td><p>A reference to the function of type F.</p></td>
604 </tr>
605 <tr>
606 <td><p><span class="term">Throws:</span></p></td>
607 <td> </td>
608 </tr>
609 </tbody>
610 </table></div>
611 </li>
612 <li class="listitem">
613 <pre class="literallayout"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Class<span class="special">,</span> <span class="keyword">typename</span> Func<span class="special">&gt;</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">&amp;</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>
618
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>
621
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">&lt;</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">&gt;</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">&lt;</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">&gt;</span><span class="special">(</span><span class="string">"MyClass::function"</span><span class="special">)</span><span class="special">;</span>
624 </pre>
625 <div class="note"><table border="0" summary="Note">
626 <tr>
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>
629 </tr>
630 <tr><td align="left" valign="top"><p>When mangled, MSVC will also check the return type.</p></td></tr>
631 </table></div>
632 <p>
633
634
635
636
637 </p>
638 <div class="variablelist"><table border="0" class="variablelist compact">
639 <colgroup>
640 <col align="left" valign="top">
641 <col>
642 </colgroup>
643 <tbody>
644 <tr>
645 <td><p><span class="term">Parameters:</span></p></td>
646 <td><div class="variablelist"><table border="0" class="variablelist compact">
647 <colgroup>
648 <col align="left" valign="top">
649 <col>
650 </colgroup>
651 <tbody><tr>
652 <td><p><span class="term"><code class="computeroutput">name</code></span></p></td>
653 <td><p>Name of the function. </p></td>
654 </tr></tbody>
655 </table></div></td>
656 </tr>
657 <tr>
658 <td><p><span class="term">Template Parameters:</span></p></td>
659 <td><div class="variablelist"><table border="0" class="variablelist compact">
660 <colgroup>
661 <col align="left" valign="top">
662 <col>
663 </colgroup>
664 <tbody>
665 <tr>
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>
668 </tr>
669 <tr>
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>
672 </tr>
673 </tbody>
674 </table></div></td>
675 </tr>
676 <tr>
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>
679 </tr>
680 <tr>
681 <td><p><span class="term">Throws:</span></p></td>
682 <td> </td>
683 </tr>
684 </tbody>
685 </table></div>
686 </li>
687 <li class="listitem">
688 <pre class="literallayout"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Signature<span class="special">&gt;</span> <span class="identifier">constructor</span><span class="special">&lt;</span> <span class="identifier">Signature</span> <span class="special">&gt;</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>
692
693 <span class="identifier">constructor</span><span class="special">&lt;</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">&lt;</span><span class="identifier">MyClass</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span><span class="special">&gt;</span><span class="special">(</span><span class="special">)</span><span class="special">;</span>
694 </pre>
695 <p>
696
697
698 </p>
699 <div class="variablelist"><table border="0" class="variablelist compact">
700 <colgroup>
701 <col align="left" valign="top">
702 <col>
703 </colgroup>
704 <tbody>
705 <tr>
706 <td><p><span class="term">Template Parameters:</span></p></td>
707 <td><div class="variablelist"><table border="0" class="variablelist compact">
708 <colgroup>
709 <col align="left" valign="top">
710 <col>
711 </colgroup>
712 <tbody><tr>
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>
715 </tr></tbody>
716 </table></div></td>
717 </tr>
718 <tr>
719 <td><p><span class="term">Returns:</span></p></td>
720 <td><p>A constructor object.</p></td>
721 </tr>
722 <tr>
723 <td><p><span class="term">Throws:</span></p></td>
724 <td> </td>
725 </tr>
726 </tbody>
727 </table></div>
728 </li>
729 <li class="listitem">
730 <pre class="literallayout"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Class<span class="special">&gt;</span> <span class="identifier">destructor</span><span class="special">&lt;</span> <span class="identifier">Class</span> <span class="special">&gt;</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>
734
735 <span class="identifier">destructor</span><span class="special">&lt;</span><span class="identifier">MyClass</span><span class="special">&gt;</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">&lt;</span><span class="identifier">MyClass</span><span class="special">&gt;</span><span class="special">(</span><span class="special">)</span><span class="special">;</span>
736 </pre>
737 <p>
738
739
740 </p>
741 <div class="variablelist"><table border="0" class="variablelist compact">
742 <colgroup>
743 <col align="left" valign="top">
744 <col>
745 </colgroup>
746 <tbody>
747 <tr>
748 <td><p><span class="term">Template Parameters:</span></p></td>
749 <td><div class="variablelist"><table border="0" class="variablelist compact">
750 <colgroup>
751 <col align="left" valign="top">
752 <col>
753 </colgroup>
754 <tbody><tr>
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>
757 </tr></tbody>
758 </table></div></td>
759 </tr>
760 <tr>
761 <td><p><span class="term">Returns:</span></p></td>
762 <td><p>A destructor object.</p></td>
763 </tr>
764 <tr>
765 <td><p><span class="term">Throws:</span></p></td>
766 <td> </td>
767 </tr>
768 </tbody>
769 </table></div>
770 </li>
771 <li class="listitem">
772 <pre class="literallayout"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Class<span class="special">&gt;</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span> <span class="special">&amp;</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>
776
777 <span class="identifier">std</span><span class="special">::</span><span class="identifier">type_info</span> <span class="special">&amp;</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">&lt;</span><span class="identifier">MyClass</span><span class="special">&gt;</span><span class="special">(</span><span class="special">)</span><span class="special">;</span>
778 </pre>
779 <p>
780
781
782 </p>
783 <div class="variablelist"><table border="0" class="variablelist compact">
784 <colgroup>
785 <col align="left" valign="top">
786 <col>
787 </colgroup>
788 <tbody>
789 <tr>
790 <td><p><span class="term">Template Parameters:</span></p></td>
791 <td><div class="variablelist"><table border="0" class="variablelist compact">
792 <colgroup>
793 <col align="left" valign="top">
794 <col>
795 </colgroup>
796 <tbody><tr>
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>
799 </tr></tbody>
800 </table></div></td>
801 </tr>
802 <tr>
803 <td><p><span class="term">Returns:</span></p></td>
804 <td><p>A reference to a type_info object.</p></td>
805 </tr>
806 <tr>
807 <td><p><span class="term">Throws:</span></p></td>
808 <td> </td>
809 </tr>
810 </tbody>
811 </table></div>
812 </li>
813 <li class="listitem">
814 <pre class="literallayout"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> Alias<span class="special">&gt;</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">&amp;</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>
817 <p>Example: </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>
819
820 <span class="identifier">lib</span><span class="special">.</span><span class="identifier">add_type_alias</span><span class="special">&lt;</span><span class="identifier">MyAlias</span><span class="special">&gt;</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>
821
822 <span class="comment">//get the destructor of MyClass</span>
823 <span class="identifier">destructor</span><span class="special">&lt;</span><span class="identifier">MyAlias</span><span class="special">&gt;</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">&lt;</span><span class="identifier">MyAlias</span><span class="special">&gt;</span><span class="special">(</span><span class="special">)</span><span class="special">;</span>
824 </pre>
825 <p>
826 </p>
827 <div class="note"><table border="0" summary="Note">
828 <tr>
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>
831 </tr>
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>
833 </table></div>
834 <p>
835 </p>
836 <div class="warning"><table border="0" summary="Warning">
837 <tr>
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>
840 </tr>
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>
842 </table></div>
843 <p>
844 </p>
845 <div class="variablelist"><table border="0" class="variablelist compact">
846 <colgroup>
847 <col align="left" valign="top">
848 <col>
849 </colgroup>
850 <tbody><tr>
851 <td><p><span class="term">Parameters:</span></p></td>
852 <td><div class="variablelist"><table border="0" class="variablelist compact">
853 <colgroup>
854 <col align="left" valign="top">
855 <col>
856 </colgroup>
857 <tbody><tr>
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>
860 </tr></tbody>
861 </table></div></td>
862 </tr></tbody>
863 </table></div>
864 </li>
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>
868 <p>
869
870 </p>
871 <div class="variablelist"><table border="0" class="variablelist compact">
872 <colgroup>
873 <col align="left" valign="top">
874 <col>
875 </colgroup>
876 <tbody>
877 <tr>
878 <td><p><span class="term">Postconditions:</span></p></td>
879 <td><p>this-&gt;is_loaded() returns false. </p></td>
880 </tr>
881 <tr>
882 <td><p><span class="term">Throws:</span></p></td>
883 <td>Nothing. </td>
884 </tr>
885 </tbody>
886 </table></div>
887 </li>
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>
891 <p>
892
893 </p>
894 <div class="variablelist"><table border="0" class="variablelist compact">
895 <colgroup>
896 <col align="left" valign="top">
897 <col>
898 </colgroup>
899 <tbody>
900 <tr>
901 <td><p><span class="term">Returns:</span></p></td>
902 <td><p>true if a library has been loaded. </p></td>
903 </tr>
904 <tr>
905 <td><p><span class="term">Throws:</span></p></td>
906 <td>Nothing. </td>
907 </tr>
908 </tbody>
909 </table></div>
910 </li>
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>
914 <p>
915
916 </p>
917 <div class="variablelist"><table border="0" class="variablelist compact">
918 <colgroup>
919 <col align="left" valign="top">
920 <col>
921 </colgroup>
922 <tbody>
923 <tr>
924 <td><p><span class="term">Returns:</span></p></td>
925 <td><p>true if a library has not been loaded. </p></td>
926 </tr>
927 <tr>
928 <td><p><span class="term">Throws:</span></p></td>
929 <td>Nothing. </td>
930 </tr>
931 </tbody>
932 </table></div>
933 </li>
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>
936 </li>
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>
940 <p>
941
942
943 </p>
944 <div class="variablelist"><table border="0" class="variablelist compact">
945 <colgroup>
946 <col align="left" valign="top">
947 <col>
948 </colgroup>
949 <tbody>
950 <tr>
951 <td><p><span class="term">Parameters:</span></p></td>
952 <td><div class="variablelist"><table border="0" class="variablelist compact">
953 <colgroup>
954 <col align="left" valign="top">
955 <col>
956 </colgroup>
957 <tbody><tr>
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>
960 </tr></tbody>
961 </table></div></td>
962 </tr>
963 <tr>
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>
966 </tr>
967 <tr>
968 <td><p><span class="term">Throws:</span></p></td>
969 <td>Nothing. </td>
970 </tr>
971 </tbody>
972 </table></div>
973 </li>
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">&amp;</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>
977 </li>
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">&amp;</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">&amp;</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>
981 <p>
982
983
984 </p>
985 <div class="variablelist"><table border="0" class="variablelist compact">
986 <colgroup>
987 <col align="left" valign="top">
988 <col>
989 </colgroup>
990 <tbody>
991 <tr>
992 <td><p><span class="term">Parameters:</span></p></td>
993 <td><div class="variablelist"><table border="0" class="variablelist compact">
994 <colgroup>
995 <col align="left" valign="top">
996 <col>
997 </colgroup>
998 <tbody><tr>
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>
1001 </tr></tbody>
1002 </table></div></td>
1003 </tr>
1004 <tr>
1005 <td><p><span class="term">Postconditions:</span></p></td>
1006 <td><p>lib.location() == this-&gt;location() </p></td>
1007 </tr>
1008 <tr>
1009 <td><p><span class="term">Throws:</span></p></td>
1010 <td> </td>
1011 </tr>
1012 </tbody>
1013 </table></div>
1014 </li>
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">&amp;</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>
1018 <p>
1019
1020 </p>
1021 <div class="variablelist"><table border="0" class="variablelist compact">
1022 <colgroup>
1023 <col align="left" valign="top">
1024 <col>
1025 </colgroup>
1026 <tbody>
1027 <tr>
1028 <td><p><span class="term">Parameters:</span></p></td>
1029 <td><div class="variablelist"><table border="0" class="variablelist compact">
1030 <colgroup>
1031 <col align="left" valign="top">
1032 <col>
1033 </colgroup>
1034 <tbody><tr>
1035 <td><p><span class="term"><code class="computeroutput">rhs</code></span></p></td>
1036 <td><p>Library to swap with. </p></td>
1037 </tr></tbody>
1038 </table></div></td>
1039 </tr>
1040 <tr>
1041 <td><p><span class="term">Throws:</span></p></td>
1042 <td>Nothing. </td>
1043 </tr>
1044 </tbody>
1045 </table></div>
1046 </li>
1047 </ol></div>
1048 </div>
1049 </div>
1050 </div>
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 &#169; 2014 Renato Tegon Forti, Antony Polukhin<br>Copyright &#169; 2015 Antony Polukhin<br>Copyright &#169; 2016 Antony Polukhin, Klemens Morgenstern<br>Copyright &#169; 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)
1056       </p>
1057 </div></td>
1058 </tr></table>
1059 <hr>
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>
1062 </div>
1063 </body>
1064 </html>