autodoc_shared_library_refcountable.xml 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. <?xml version="1.0" standalone="yes"?>
  2. <library-reference id="shared_library_refcountable_reference"><title>Shared Library Refcountable Reference</title><header name="boost/dll/import.hpp">
  3. <para>Contains all the boost::dll::import* reference counting functions that hold a shared pointer to the instance of boost::dll::shared_library. </para><namespace name="boost">
  4. <namespace name="dll">
  5. <overloaded-function name="import"><signature><type>result_type</type><template>
  6. <template-type-parameter name="T"/>
  7. </template><parameter name="lib"><paramtype>const boost::dll::fs::path &amp;</paramtype><description><para>Path to shared library or shared library to load function from. </para></description></parameter><parameter name="name"><paramtype>const char *</paramtype><description><para>Null-terminated C or C++ mangled name of the function to import. Can handle std::string, char*, const char*. </para></description></parameter><parameter name="mode"><paramtype>load_mode::type</paramtype><default>load_mode::default_mode</default><description><para>An mode that will be used on library load.</para></description></parameter></signature><signature><type>result_type</type><template>
  8. <template-type-parameter name="T"/>
  9. </template><parameter name="lib"><paramtype>const boost::dll::fs::path &amp;</paramtype></parameter><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter><parameter name="mode"><paramtype>load_mode::type</paramtype><default>load_mode::default_mode</default></parameter></signature><signature><type>result_type</type><template>
  10. <template-type-parameter name="T"/>
  11. </template><parameter name="lib"><paramtype>const shared_library &amp;</paramtype></parameter><parameter name="name"><paramtype>const char *</paramtype></parameter></signature><signature><type>result_type</type><template>
  12. <template-type-parameter name="T"/>
  13. </template><parameter name="lib"><paramtype>const shared_library &amp;</paramtype></parameter><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter></signature><signature><type>result_type</type><template>
  14. <template-type-parameter name="T"/>
  15. </template><parameter name="lib"><paramtype>shared_library &amp;&amp;</paramtype></parameter><parameter name="name"><paramtype>const char *</paramtype></parameter></signature><signature><type>result_type</type><template>
  16. <template-type-parameter name="T"/>
  17. </template><parameter name="lib"><paramtype>shared_library &amp;&amp;</paramtype></parameter><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter></signature><description><para>Returns callable object or boost::shared_ptr&lt;T&gt; that holds the symbol imported from the loaded library. Returned value refcounts usage of the loaded shared library, so that it won't get unload until all copies of return value are not destroyed.</para><para>This call will succeed if call to <link linkend="boost.dll.shared_library">boost::dll::shared_library</link><computeroutput>::has(const char* )</computeroutput> function with the same symbol name returned <computeroutput>true</computeroutput>.</para><para>For importing symbols by <emphasis role="bold">alias</emphasis> names use <link linkend="boost.dll.import_alias">boost::dll::import_alias</link> method.</para><para><emphasis role="bold">Examples:</emphasis> </para><para><programlisting language="c++">boost::function&lt;int(int)&gt; f = import&lt;int(int)&gt;("test_lib.so", "integer_func_name");
  18. auto f_cpp11 = import&lt;int(int)&gt;("test_lib.so", "integer_func_name");
  19. </programlisting></para><para><programlisting language="c++">boost::shared_ptr&lt;int&gt; i = import&lt;int&gt;("test_lib.so", "integer_name");
  20. </programlisting></para><para><emphasis role="bold">Template</emphasis> <emphasis role="bold">parameter</emphasis> <emphasis role="bold">T:</emphasis> Type of the symbol that we are going to import. Must be explicitly specified.</para><para>
  21. </para></description><returns><para>callable object if T is a function type, or boost::shared_ptr&lt;T&gt; if T is an object type.</para>
  22. </returns><throws><simpara><classname/> </simpara></throws></overloaded-function>
  23. <overloaded-function name="import_alias"><signature><type>result_type</type><template>
  24. <template-type-parameter name="T"/>
  25. </template><parameter name="lib"><paramtype>const boost::dll::fs::path &amp;</paramtype><description><para>Path to shared library or shared library to load function from. </para></description></parameter><parameter name="name"><paramtype>const char *</paramtype><description><para>Null-terminated C or C++ mangled name of the function or variable to import. Can handle std::string, char*, const char*. </para></description></parameter><parameter name="mode"><paramtype>load_mode::type</paramtype><default>load_mode::default_mode</default><description><para>An mode that will be used on library load.</para></description></parameter></signature><signature><type>result_type</type><template>
  26. <template-type-parameter name="T"/>
  27. </template><parameter name="lib"><paramtype>const boost::dll::fs::path &amp;</paramtype></parameter><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter><parameter name="mode"><paramtype>load_mode::type</paramtype><default>load_mode::default_mode</default></parameter></signature><signature><type>result_type</type><template>
  28. <template-type-parameter name="T"/>
  29. </template><parameter name="lib"><paramtype>const shared_library &amp;</paramtype></parameter><parameter name="name"><paramtype>const char *</paramtype></parameter></signature><signature><type>result_type</type><template>
  30. <template-type-parameter name="T"/>
  31. </template><parameter name="lib"><paramtype>const shared_library &amp;</paramtype></parameter><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter></signature><signature><type>result_type</type><template>
  32. <template-type-parameter name="T"/>
  33. </template><parameter name="lib"><paramtype>shared_library &amp;&amp;</paramtype></parameter><parameter name="name"><paramtype>const char *</paramtype></parameter></signature><signature><type>result_type</type><template>
  34. <template-type-parameter name="T"/>
  35. </template><parameter name="lib"><paramtype>shared_library &amp;&amp;</paramtype></parameter><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter></signature><description><para>Returns callable object or boost::shared_ptr&lt;T&gt; that holds the symbol imported from the loaded library. Returned value refcounts usage of the loaded shared library, so that it won't get unload until all copies of return value are not destroyed.</para><para>This call will succeed if call to <link linkend="boost.dll.shared_library">boost::dll::shared_library</link><computeroutput>::has(const char* )</computeroutput> function with the same symbol name returned <computeroutput>true</computeroutput>.</para><para>For importing symbols by <emphasis role="bold">non</emphasis> <emphasis role="bold">alias</emphasis> names use <link linkend="boost.dll.import">boost::dll::import</link> method.</para><para><emphasis role="bold">Examples:</emphasis> </para><para><programlisting language="c++">boost::function&lt;int(int)&gt; f = import_alias&lt;int(int)&gt;("test_lib.so", "integer_func_alias_name");
  36. auto f_cpp11 = import_alias&lt;int(int)&gt;("test_lib.so", "integer_func_alias_name");
  37. </programlisting></para><para><programlisting language="c++">boost::shared_ptr&lt;int&gt; i = import_alias&lt;int&gt;("test_lib.so", "integer_alias_name");
  38. </programlisting></para><para><programlisting language="c++"/></para><para><emphasis role="bold">Template</emphasis> <emphasis role="bold">parameter</emphasis> <emphasis role="bold">T:</emphasis> Type of the symbol alias that we are going to import. Must be explicitly specified.</para><para>
  39. </para></description><returns><para>callable object if T is a function type, or boost::shared_ptr&lt;T&gt; if T is an object type.</para>
  40. </returns><throws><simpara><classname/> </simpara></throws></overloaded-function>
  41. </namespace>
  42. </namespace>
  43. </header>
  44. <header name="boost/dll/import_class.hpp">
  45. <namespace name="boost">
  46. <namespace name="dll">
  47. <namespace name="experimental">
  48. <class name="imported_class"><template>
  49. <template-type-parameter name="T"/>
  50. </template><description><para>This class represents an imported class.</para><para><note><para>It must be constructed via boost::dll::import_class(const smart_library&amp; lib, std::size_t, Args...)</para>
  51. </note>
  52. </para></description><typedef name="base_t"><type><classname>imported_class</classname>&lt; T &gt;</type></typedef>
  53. <method-group name="private member functions">
  54. <method name="make_data"><type><emphasis>unspecified</emphasis></type><template>
  55. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  56. </template><parameter name="lib"><paramtype>const smart_library &amp;</paramtype></parameter><parameter name="args"><paramtype>Args ...</paramtype></parameter></method>
  57. <method name="make_data"><type><emphasis>unspecified</emphasis></type><template>
  58. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  59. </template><parameter name="lib"><paramtype>const smart_library &amp;</paramtype></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></method>
  60. </method-group>
  61. <constructor><template>
  62. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  63. </template><parameter name=""><paramtype><emphasis>unspecified</emphasis></paramtype></parameter><parameter name="lib"><paramtype>const smart_library &amp;</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></constructor>
  64. <constructor><template>
  65. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  66. </template><parameter name=""><paramtype><emphasis>unspecified</emphasis></paramtype></parameter><parameter name="lib"><paramtype>const smart_library &amp;</paramtype></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></constructor>
  67. <constructor><template>
  68. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  69. </template><parameter name=""><paramtype><emphasis>unspecified</emphasis></paramtype></parameter><parameter name="lib"><paramtype>smart_library &amp;&amp;</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></constructor>
  70. <constructor><template>
  71. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  72. </template><parameter name=""><paramtype><emphasis>unspecified</emphasis></paramtype></parameter><parameter name="lib"><paramtype>smart_library &amp;&amp;</paramtype></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></constructor>
  73. <method-group name="public static functions">
  74. <method name="make" specifiers="static"><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  75. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  76. </template><parameter name="lib"><paramtype>smart_library &amp;&amp;</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></method>
  77. <method name="make" specifiers="static"><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  78. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  79. </template><parameter name="lib"><paramtype>smart_library &amp;&amp;</paramtype></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></method>
  80. <method name="make" specifiers="static"><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  81. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  82. </template><parameter name="lib"><paramtype>const smart_library &amp;</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></method>
  83. <method name="make" specifiers="static"><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  84. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  85. </template><parameter name="lib"><paramtype>const smart_library &amp;</paramtype></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></method>
  86. </method-group>
  87. <method-group name="public member functions">
  88. <method name="get"><type>T *</type><purpose>Returns a pointer to the underlying class. </purpose></method>
  89. <method name="is_move_constructible"><type>bool</type><purpose>Check if the imported class is move-constructible. </purpose></method>
  90. <method name="is_move_assignable"><type>bool</type><purpose>Check if the imported class is move-assignable. </purpose></method>
  91. <method name="is_copy_constructible"><type>bool</type><purpose>Check if the imported class is copy-constructible. </purpose></method>
  92. <method name="is_copy_assignable"><type>bool</type><purpose>Check if the imported class is copy-assignable. </purpose></method>
  93. <method name="copy" cv="const"><type><classname>imported_class</classname>&lt; T &gt;</type><purpose>Invoke the copy constructor. </purpose><description><para><note><para>Undefined behaviour if the imported object is not copy constructible. </para>
  94. </note>
  95. </para></description></method>
  96. <method name="move"><type><classname>imported_class</classname>&lt; T &gt;</type><purpose>Invoke the move constructor. </purpose><description><para><note><para>Undefined behaviour if the imported object is not move constructible. </para>
  97. </note>
  98. </para></description></method>
  99. <method name="copy_assign" cv="const"><type>void</type><parameter name="lhs"><paramtype>const <classname>imported_class</classname>&lt; T &gt; &amp;</paramtype></parameter><purpose>Invoke the copy assignment. </purpose><description><para><note><para>Undefined behaviour if the imported object is not copy assignable. </para>
  100. </note>
  101. </para></description></method>
  102. <method name="move_assign"><type>void</type><parameter name="lhs"><paramtype><classname>imported_class</classname>&lt; T &gt; &amp;</paramtype></parameter><purpose>Invoke the move assignment. </purpose><description><para><note><para>Undefined behaviour if the imported object is not move assignable. </para>
  103. </note>
  104. </para></description></method>
  105. <method name="conversion-operator" cv="const" specifiers="explicit"><type>bool</type><purpose>Check if the class is loaded. </purpose></method>
  106. <method name="get_type_info"><type>const std::type_info &amp;</type><purpose>Get a const reference to the std::type_info. </purpose></method>
  107. <method name="call"><type><emphasis>unspecified</emphasis></type><template>
  108. <template-type-parameter name="Signature"/>
  109. </template><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter><description><para>Call a member function. This returns a proxy to the function. The proxy mechanic mechanic is necessary, so the signaute can be passed.</para><para><emphasis role="bold">Example</emphasis> </para><para><programlisting language="c++">im_class.call&lt;void(const char*)&gt;("function_name")("MyString");
  110. </programlisting> </para></description></method>
  111. <method name="call"><type><emphasis>unspecified</emphasis></type><template>
  112. <template-type-parameter name="Tin"/>
  113. <template-type-parameter name="Signature"/>
  114. <template-type-parameter name=""><default>boost::enable_if&lt;detail::unqalified_is_same&lt;T, Tin&gt;&gt;</default></template-type-parameter>
  115. </template><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter><description><para>Call a qualified member function, i.e. const and or volatile.</para><para><emphasis role="bold">Example</emphasis> </para><para><programlisting language="c++">im_class.call&lt;const type_alias, void(const char*)&gt;("function_name")("MyString");
  116. </programlisting> </para></description></method>
  117. <method name="operator-&gt;*"><type><emphasis>unspecified</emphasis></type><template>
  118. <template-type-parameter name="Tin"/>
  119. <template-type-parameter name="T2"/>
  120. </template><parameter name="mn"><paramtype><emphasis>unspecified</emphasis></paramtype></parameter><purpose>Overload of -&gt;* for an imported method. </purpose></method>
  121. <method name="import"><type><emphasis>unspecified</emphasis></type><template>
  122. <template-nontype-parameter name="Args"><type>class ...</type></template-nontype-parameter>
  123. </template><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter><purpose>Import a method of the class. </purpose></method>
  124. </method-group>
  125. <constructor cv="= delete"/>
  126. <constructor cv="= delete"><parameter name=""><paramtype><classname>imported_class</classname> &amp;</paramtype></parameter></constructor>
  127. <constructor cv="= default"><parameter name=""><paramtype><classname>imported_class</classname> &amp;&amp;</paramtype></parameter><purpose>Move constructor. </purpose></constructor>
  128. <copy-assignment cv="= delete"><type><classname>imported_class</classname> &amp;</type><parameter name=""><paramtype><classname>imported_class</classname> &amp;</paramtype></parameter></copy-assignment>
  129. <copy-assignment cv="= default"><type><classname>imported_class</classname> &amp;</type><parameter name=""><paramtype><classname>imported_class</classname> &amp;&amp;</paramtype></parameter><purpose>Move assignmend. </purpose></copy-assignment>
  130. </class>
  131. <overloaded-function name="import_class"><signature><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  132. <template-type-parameter name="T"><purpose><para>Class type or alias </para></purpose></template-type-parameter>
  133. <template-nontype-parameter name="Args"><type>typename ...</type><purpose><para>Constructor argument list. </para></purpose></template-nontype-parameter>
  134. </template><parameter name="lib"><paramtype>const smart_library &amp;</paramtype><description><para>Path to shared library or shared library to load function from. </para></description></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></signature><signature><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  135. <template-type-parameter name="T"/>
  136. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  137. </template><parameter name="lib"><paramtype>const smart_library &amp;</paramtype></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="alias_name"><paramtype>const std::string &amp;</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></signature><signature><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  138. <template-type-parameter name="T"/>
  139. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  140. </template><parameter name="lib_"><paramtype>const smart_library &amp;</paramtype></parameter><parameter name="alias_name"><paramtype>const std::string &amp;</paramtype></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></signature><signature><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  141. <template-type-parameter name="T"/>
  142. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  143. </template><parameter name="lib"><paramtype>smart_library &amp;&amp;</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></signature><signature><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  144. <template-type-parameter name="T"/>
  145. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  146. </template><parameter name="lib"><paramtype>smart_library &amp;&amp;</paramtype></parameter><parameter name="alias_name"><paramtype>const std::string &amp;</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></signature><signature><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  147. <template-type-parameter name="T"/>
  148. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  149. </template><parameter name="lib"><paramtype>smart_library &amp;&amp;</paramtype></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></signature><signature><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  150. <template-type-parameter name="T"/>
  151. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  152. </template><parameter name="lib"><paramtype>smart_library &amp;&amp;</paramtype></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="alias_name"><paramtype>const std::string &amp;</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></signature><signature><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  153. <template-type-parameter name="T"/>
  154. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  155. </template><parameter name="lib"><paramtype>smart_library &amp;&amp;</paramtype></parameter><parameter name="alias_name"><paramtype>const std::string &amp;</paramtype></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></signature><description><para>Returns an instance of <classname alt="boost::dll::experimental::imported_class">imported_class</classname> which allows to call or import more functions. It takes a copy of the smart_libray, so no added type_aliases will be visible, for the object.</para><para>Few compilers do implement an allocating constructor, which allows the construction of the class without knowing the size. That is not portable, so the actual size of the class shall always be provided.</para><para><emphasis role="bold">Example:</emphasis> </para><para><programlisting language="c++">auto import_class&lt;class type_alias, const std::string&amp;, std::size_t&gt;(lib, "class_name", 20, "param1", 42);
  156. </programlisting></para><para>In this example we construct an instance of the class "class_name" with the size 20, which has "type_alias" as an alias, through a constructor which takes a const-ref of std::string and an std::size_t parameter.</para><para>
  157. </para></description><returns><para>class object.</para>
  158. </returns><throws><simpara><classname/> </simpara></throws></overloaded-function>
  159. <function name="import_class"><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  160. <template-type-parameter name="T"/>
  161. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  162. </template><parameter name="lib"><paramtype>smart_library &amp;</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></function>
  163. <function name="import_class"><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  164. <template-type-parameter name="T"/>
  165. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  166. </template><parameter name="lib"><paramtype>smart_library &amp;</paramtype></parameter><parameter name="alias_name"><paramtype>const std::string &amp;</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></function>
  167. <function name="import_class"><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  168. <template-type-parameter name="T"/>
  169. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  170. </template><parameter name="lib"><paramtype>smart_library &amp;</paramtype></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></function>
  171. <function name="import_class"><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  172. <template-type-parameter name="T"/>
  173. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  174. </template><parameter name="lib"><paramtype>smart_library &amp;</paramtype></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="alias_name"><paramtype>const std::string &amp;</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></function>
  175. <function name="import_class"><type><classname>imported_class</classname>&lt; T &gt;</type><template>
  176. <template-type-parameter name="T"/>
  177. <template-nontype-parameter name="Args"><type>typename ...</type></template-nontype-parameter>
  178. </template><parameter name="lib"><paramtype>smart_library &amp;</paramtype></parameter><parameter name="alias_name"><paramtype>const std::string &amp;</paramtype></parameter><parameter name="size"><paramtype>std::size_t</paramtype></parameter><parameter name="args"><paramtype>Args...</paramtype></parameter></function>
  179. </namespace>
  180. </namespace>
  181. </namespace>
  182. </header>
  183. <header name="boost/dll/import_mangled.hpp">
  184. <namespace name="boost">
  185. <namespace name="dll">
  186. <namespace name="experimental">
  187. <overloaded-function name="import_mangled"><signature><type>result_type</type><template>
  188. <template-nontype-parameter name="Args"><type>class ...</type></template-nontype-parameter>
  189. </template><parameter name="lib"><paramtype>const boost::dll::fs::path &amp;</paramtype><description><para>Path to shared library or shared library to load function from. </para></description></parameter><parameter name="name"><paramtype>const char *</paramtype><description><para>Null-terminated C or C++ mangled name of the function to import. Can handle std::string, char*, const char*. </para></description></parameter><parameter name="mode"><paramtype>load_mode::type</paramtype><default>load_mode::default_mode</default><description><para>An mode that will be used on library load.</para></description></parameter></signature><signature><type>result_type</type><template>
  190. <template-nontype-parameter name="Args"><type>class ...</type></template-nontype-parameter>
  191. </template><parameter name="lib"><paramtype>const boost::dll::fs::path &amp;</paramtype></parameter><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter><parameter name="mode"><paramtype>load_mode::type</paramtype><default>load_mode::default_mode</default></parameter></signature><signature><type>result_type</type><template>
  192. <template-nontype-parameter name="Args"><type>class ...</type></template-nontype-parameter>
  193. </template><parameter name="lib"><paramtype>const smart_library &amp;</paramtype></parameter><parameter name="name"><paramtype>const char *</paramtype></parameter></signature><signature><type>result_type</type><template>
  194. <template-nontype-parameter name="Args"><type>class ...</type></template-nontype-parameter>
  195. </template><parameter name="lib"><paramtype>const smart_library &amp;</paramtype></parameter><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter></signature><signature><type>result_type</type><template>
  196. <template-nontype-parameter name="Args"><type>class ...</type></template-nontype-parameter>
  197. </template><parameter name="lib"><paramtype>smart_library &amp;&amp;</paramtype></parameter><parameter name="name"><paramtype>const char *</paramtype></parameter></signature><signature><type>result_type</type><template>
  198. <template-nontype-parameter name="Args"><type>class ...</type></template-nontype-parameter>
  199. </template><parameter name="lib"><paramtype>smart_library &amp;&amp;</paramtype></parameter><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter></signature><signature><type>result_type</type><template>
  200. <template-nontype-parameter name="Args"><type>class ...</type></template-nontype-parameter>
  201. </template><parameter name="lib"><paramtype>const shared_library &amp;</paramtype></parameter><parameter name="name"><paramtype>const char *</paramtype></parameter></signature><signature><type>result_type</type><template>
  202. <template-nontype-parameter name="Args"><type>class ...</type></template-nontype-parameter>
  203. </template><parameter name="lib"><paramtype>const shared_library &amp;</paramtype></parameter><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter></signature><signature><type>result_type</type><template>
  204. <template-nontype-parameter name="Args"><type>class ...</type></template-nontype-parameter>
  205. </template><parameter name="lib"><paramtype>shared_library &amp;&amp;</paramtype></parameter><parameter name="name"><paramtype>const char *</paramtype></parameter></signature><signature><type>result_type</type><template>
  206. <template-nontype-parameter name="Args"><type>class ...</type></template-nontype-parameter>
  207. </template><parameter name="lib"><paramtype>shared_library &amp;&amp;</paramtype></parameter><parameter name="name"><paramtype>const std::string &amp;</paramtype></parameter></signature><description><para>Returns callable object or boost::shared_ptr&lt;T&gt; that holds the symbol imported from the loaded library. Returned value refcounts usage of the loaded shared library, so that it won't get unload until all copies of return value are not destroyed.</para><para>For importing symbols by <emphasis role="bold">alias</emphasis> names use <link linkend="boost.dll.import_alias">boost::dll::import_alias</link> method.</para><para><emphasis role="bold">Examples:</emphasis> </para><para><programlisting language="c++">boost::function&lt;int(int)&gt; f = import_mangled&lt;int(int)&gt;("test_lib.so", "integer_func_name");
  208. auto f_cpp11 = import_mangled&lt;int(int)&gt;("test_lib.so", "integer_func_name");
  209. </programlisting></para><para><programlisting language="c++">boost::shared_ptr&lt;int&gt; i = import_mangled&lt;int&gt;("test_lib.so", "integer_name");
  210. </programlisting></para><para>Additionally you can also import overloaded symbols, including member-functions.</para><para><programlisting language="c++">auto fp = import_mangled&lt;void(int), void(double)&gt;("test_lib.so", "func");
  211. </programlisting></para><para><programlisting language="c++">auto fp = import_mangled&lt;my_class, void(int), void(double)&gt;("test_lib.so", "func");
  212. </programlisting></para><para>If qualified member-functions are needed, this can be set by repeating the class name with const or volatile. All following signatures after the redifintion will use this, i.e. the latest.</para><para><itemizedlist>
  213. <listitem><para>*<programlisting language="c++">auto fp = import_mangled&lt;my_class, void(int), void(double),
  214. const my_class, void(int), void(double)&gt;("test_lib.so", "func");
  215. </programlisting></para>
  216. </listitem></itemizedlist>
  217. </para><para><emphasis role="bold">Template</emphasis> <emphasis role="bold">parameter</emphasis> <emphasis role="bold">T:</emphasis> Type of the symbol that we are going to import. Must be explicitly specified.</para><para>
  218. </para></description><returns><para>callable object if T is a function type, or boost::shared_ptr&lt;T&gt; if T is an object type.</para>
  219. </returns><throws><simpara><classname/> </simpara></throws></overloaded-function>
  220. </namespace>
  221. </namespace>
  222. </namespace>
  223. </header>
  224. </library-reference>