![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Class smart_libraryBoost , The Boost C++ Libraries BoostBook Documentation Subset , Reference
|
![]() |
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 эта функция также будет загружать заданные переменные, которые также включают статические члены класса.
![]() | Примечание | ||
---|---|---|---|
При искалечении 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");>
![]() | Примечание |
---|---|
При искалечении 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>();>
![]() | Примечание |
---|---|
Если тип псевдонима недостаточно велик для импортируемого класса, это приведет к неопределенному поведению. |
Предупреждение | |
---|---|
Фамилия будет применяться только для подписи типа, она не заменит токен в обозначенном названии. |
Параметры: |
|
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.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
реклама |