|  | 
|      | 
|  | 
| Class smart_libraryBoost , The Boost C++ Libraries BoostBook Documentation Subset , Reference
  
   | 
| ![[Warning]](/img/warning.png) | Warning | 
|---|---|
| Это все еще очень экспериментально. | 
В настоящее время известны ограничения:
Функции членов должны быть определены вне класса, подлежащего экспорту. Это:
//not exported: struct BOOST_SYMBOL_EXPORT my_class { void func() {}}; //exported struct BOOST_SYMBOL_EXPORT my_class { void func();}; void my_class::func() {};
При текущем анализе первая версия действительно экспортируется в MSVC. MinGW также экспортирует BOOST_SYMBOL_EXPORT. Для этого на окнах можно использовать Boost_DLL_MEMBER_EXPORT. Для этого MinGW и MSVC могут предоставить эти функции. Однако это не работает с GCC на Linux.
Прямая инициализация членов. На linux следующие переменные элемента i не будут инициализированы при использовании распределительного подрядчика:
struct BOOST_SYMBOL_EXPORT my_class { int i; my_class() : i(42) {} };
Однако это не происходит, когда значение устанавливается внутри функции конструктора.
smart_library 
        public
       construct/copy/destructsmart_library()noexcept;>
Создает нечто, не имеющее отношения к DLL/DSO.
| Постпредства: | это->is_loaded() возвращает ложное. | 
| Броски: | Ничего. | 
smart_library(constboost::filesystem::path&lib_path, load_mode::typemode=load_mode::default_mode);>
Загружает библиотеку указанным путем с заданным режимом.
| Параметры: | 
 | |||
| Броски: | повышают::system::system_error в случае недостаточной памяти. | 
smart_library(constboost::filesystem::path&lib_path, boost::system::error_code&ec, load_mode::typemode=load_mode::default_mode);>
Загружает библиотеку указанным путем с заданным режимом.
| Параметры: | 
 
 mangled_storage&symbol_storage();>Перегрузка для текущего развития. voidload(constboost::filesystem::path&lib_path, load_mode::typemode=load_mode::default_mode);> Загружает библиотеку по заданному пути с заданным режимом. Обратите внимание, что если какая-либо библиотека уже загружена в этом случае, загрузка вызовет разгрузку (), а затем загрузит новую предоставленную библиотеку. Параметры: < | lib_path>Имя файла библиотеки. Может обрабатывать std::string, const char*, std::wstring, const wchar_t* или boost::filesystem::path. < Режим, который будет использоваться при загрузке библиотеки. | |||||||||||||||||||||||||||||||||||||||||||||||||||
| Броски: | повышают::system::system_error в случае недостаточной памяти. | 
voidload(constboost::filesystem::path&lib_path, boost::system::error_code&ec, load_mode::typemode=load_mode::default_mode);>
Загружает библиотеку указанным путем с заданным режимом.
Обратите внимание, что если какая-либо библиотека уже загружена в этом случае, загрузка вызовет разгрузку (), а затем загрузит новую предоставленную библиотеку.
| Параметры: | 
 | ||||||
| Броски: | std::bad_alloc в случае недостаточной памяти. | 
voidload(constboost::filesystem::path&lib_path,load_mode::typemode, boost::system::error_code&ec);>
Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.
template<typenameT>T&get_variable(conststd::string&name)const;>
Загрузить переменную из библиотеки ссылок.
Unlinke shared_library::get эта функция также будет загружать заданные переменные, которые также включают статические члены класса.
| ![[Note]](/img/note.png) | Примечание | ||
|---|---|---|---|
| При искалечении MSVC также проверит тип. | 
template<typenameFunc>Func&get_function(conststd::string&name)const;>
Загрузите функцию из библиотеки ссылок.
Пример:
<smart_librarylib("test_lib.so"); typedefint (&add_ints)(int,int); typedefdouble(&add_doubles)(double,double); add_ints f1=lib.get_function<int(int,int)> ("func_name"); add_doublesf2=lib.get_function<double(double,double)>("func_name");>
| ![[Note]](/img/note.png) | Примечание | 
|---|---|
| При искалечении MSVC также проверит тип возврата. | 
Класс, в котором функция является членом. Если класс является const, то функция будет приниматься как принятие const этого указателя. То же самое касается летучих веществ.
<Func>
Подпись функции, необходимой для определения перегрузки
Возвращает:
Указатель на член-функцию с предоставленной подписью
Броски:
template<typenameSignature>constructor<Signature>get_constructor()const;>
Загрузите конструктор из справочной библиотеки.
Пример[импортный класс - MyClass, который доступен внутри библиотеки и хоста]:
<smart_librarylib("test_lib.so"); constructor<MyClass(int) f1=lib.get_mem_fn<MyClass(int)>();>
<Signature>
<Signature>
<Signature>
Подпись функции, необходимой для определения перегрузки. Тип возврата - это класс, который является конструктором.
Возврат:
Объект-конструктор.
Броски:
template<typenameClass>destructor<Class>get_destructor()const;>
Загрузите деструктор из указанной библиотеки.
Пример[импортный класс - MyClass, который доступен внутри библиотеки и хоста]:
<smart_librarylib("test_lib.so"); destructor<MyClass> f1=lib.get_mem_fn<MyClass>();>
| < Class> | 
 | |||||
| Возвращает: | Объект-разрушитель. | |||||
| Бросает: | повышает::system::system_error, если символ не существует или если DLL/DSO не был загружен. | 
template<typenameClass>conststd::type_info&get_type_info()const;>
Загрузите информацию о типе данного типа.
Пример[импортный класс - MyClass, который доступен внутри библиотеки и хоста]:
<smart_librarylib("test_lib.so"); std::type_info&ti=lib.get_Type_info<MyClass>();>
| [12 Класс, по которому загружается информация типа | 
Возвращает:
Ссылка на объект type_info.
Броски:
template<typenameAlias>voidadd_type_alias(conststd::string&name);>
Эту функцию можно использовать для добавления псевдонима типа.
Это используется, когда класс импортируется, который не объявлен на принимающей стороне.
Пример:
<smart_librarylib("test_lib.so"); lib.add_type_alias<MyAlias>("MyClass");//when using MyAlias, the library will look for MyClass //get the destructor of MyClass destructor<MyAlias>dtor=lib.get_destructor<MyAlias>();>
| ![[Note]](/img/note.png) | Примечание | 
|---|---|
| Если тип псевдонима недостаточно велик для импортируемого класса, это приведет к неопределенному поведению. | 
| Предупреждение | |
|---|---|
| Фамилия будет применяться только для подписи типа, она не заменит токен в обозначенном названии. | 
| Параметры: | 
 | 
voidunload()noexcept;>
Разгружает общую библиотеку. Если библиотека была загружена несколько раз различными экземплярами, фактическая DLL/DSO не будет разгружена до тех пор, пока не будет по крайней мере один экземпляр, который ссылается на DLL/DSO.
| Пост-условия: | это-и-это_загружен() возвращает ложное. | |
| Броски: | Ничего. | 
boolis_loaded()constnoexcept;>
Проверьте, загружена ли библиотека.
| Возвращение: | истинно, если загружена библиотека. | 
| Ничего. | 
booloperator!()constnoexcept;>
Проверьте, не загружена ли библиотека.
| Возвращает: | верно, если библиотека не была загружена. | 
| Броски: | Ничего. | 
explicitoperatorbool()constnoexcept;>bool() const
bool() const
boolhas(constchar*symbol_name)constnoexcept;>
Поиск заданного символа в загруженной библиотеке. Работает для всех символов, включая имена псевдонимов.
| Параметры: | 
 | ||
| Возврат: | < | ||
| Броски: | Ничего. | 
boolhas(conststd::string&symbol_name)constnoexcept;>
Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.
smart_library&assign(constsmart_library&lib);>
Делает эту долю тем же общим объектом, что и Либ. Если * это загружено, то разгружает его.
| Параметры: | 
 | 
| Последующие условия: | lib.location() == this->location() | 
| Броски: | повышают::system::system_error в случае недостаточной памяти. | 
voidswap(smart_library&rhs)noexcept;>
Обменяет две библиотеки. Не отменяет существующие символы и функции, загруженные из библиотек.
Броски:
Статья Class smart_library раздела The Boost C++ Libraries BoostBook Documentation Subset Reference может быть полезна для разработчиков на c++ и boost.
| реклама |