Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Class smart_library

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Reference

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Class smart_library

boost::dll::experimental::smart_library — This class is an extension of shared_library, which allows to load C++ symbols.

Synopsis

// In header: <boost/dll/smart_library.hpp>

class smart_library {
public:
  // types
  typedef unspecified mangled_storage;
  // construct/copy/destruct
  smart_library() noexcept;
  smart_library(const boost::filesystem::path &, 
                load_mode::type = load_mode::default_mode);
  smart_library(const boost::filesystem::path &, boost::system::error_code &, 
                load_mode::type = load_mode::default_mode);
  smart_library(const boost::filesystem::path &, load_mode::type, 
                boost::system::error_code &);
  smart_library(const smart_library &) noexcept;
  smart_library(smart_library &&) noexcept;
  explicit smart_library(const shared_library &) noexcept;
  explicit smart_library(shared_library &&) noexcept;
  ~smart_library();
  // public member functions
  const shared_library & shared_lib() const;
  const mangled_storage & symbol_storage() const;
  mangled_storage & symbol_storage();
  void load(const boost::filesystem::path &, 
            load_mode::type = load_mode::default_mode);
  void load(const boost::filesystem::path &, boost::system::error_code &, 
            load_mode::type = load_mode::default_mode);
  void load(const boost::filesystem::path &, load_mode::type, 
            boost::system::error_code &);
  template<typename T> T & get_variable(const std::string &) const;
  template<typename Func> Func & get_function(const std::string &) const;
  template<typename Class, typename Func> 
    unspecified get_mem_fn(const std::string &) const;
  template<typename Signature> 
    constructor< Signature > get_constructor() const;
  template<typename Class> destructor< Class > get_destructor() const;
  template<typename Class> const std::type_info & get_type_info() const;
  template<typename Alias> void add_type_alias(const std::string &);
  void unload() noexcept;
  bool is_loaded() const noexcept;
  bool operator!() const noexcept;
  explicit operator bool() const noexcept;
  bool has(const char *) const noexcept;
  bool has(const std::string &) const noexcept;
  smart_library & assign(const smart_library &);
  void swap(smart_library &) noexcept;
};

Description

Этот класс позволяет безопасно загружать перегруженные функции, функции-члены, конструкторы и переменные. Он также позволяет перезаписывать классы, чтобы они могли быть загружены, будучи объявленными с разными именами.

[Warning] 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/destruct

  1. <
    smart_library()noexcept;
    >

    Создает нечто, не имеющее отношения к DLL/DSO.

    Постпредства:

    это->is_loaded() возвращает ложное.

    Броски:

    Ничего.
  2. <
    smart_library(constboost::filesystem::path&lib_path,
                 load_mode::typemode=load_mode::default_mode);
    >

    Загружает библиотеку указанным путем с заданным режимом.

    Параметры:

    Название файла библиотеки. Может обрабатывать std::string, const char*, std::wstring, const wchar_t* или boost::filesystem::path.

    <mode>

    Режим, который будет использоваться при загрузке библиотеки.

    Броски:

    повышают::system::system_error в случае недостаточной памяти.
  • <
    smart_library(constboost::filesystem::path&lib_path,
                 boost::system::error_code&ec,
                 load_mode::typemode=load_mode::default_mode);
    >

    Загружает библиотеку указанным путем с заданным режимом.

    Параметры:

    <ec>

    [124 Переменная, которая будет установлена на результат операции.

    <lib_path>

    Файл библиотеки. Может обрабатывать std::string, const char*, std::wstring, const wchar_t* или boost::filesystem::path.

    <mode>

    Броски:

    Режим, который будет использоваться на библиотечной нагрузке.

    std::bad_alloc в случае недостаточной памяти.
  • <
    smart_library(constboost::filesystem::path&lib_path,load_mode::typemode,
                 boost::system::error_code&ec);
    >

    Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.

  • <
    smart_library(constsmart_library&lib)noexcept;
    >

    копировать<smart_library>объект.

    Параметры:

    <lib>

    А<smart_library>для перемещения.

    Броски:

    Ничего.
  • <
    smart_library(smart_library&&lib)noexcept;
    >

    Переместить<smart_library>объект.

    Параметры:

    <lib>

    <smart_library>А<smart_library>для перемещения из

    Броски:

    Ничего.
  • <
    explicitsmart_library(constshared_library&lib)noexcept;
    >

    Конструкция из<shared_library>объекта.

    Параметры:

    <lib>

    А<shared_library>для перемещения.

    Броски:

    Ничего.
  • <
    explicitsmart_library(shared_library&&lib)noexcept;
    >

    Конструкция из<shared_library>объекта.

    Параметры:

    <lib>

    А<shared_library>для перемещения из.

    Броски:

    Ничего.
  • <
    ~smart_library();
    >

    Уничтожает<smart_library>.<unload()>называется, если DLL/DSO был загружен. Если библиотека была загружена несколько раз различными экземплярами<shared_library>, фактическая DLL / DSO не будет выгружена, пока не будет по крайней мере один экземпляр<shared_library>.

    Бросок:

    Ничего.
  • smart_library public member functions

    1. <
      constshared_library&shared_lib()const;
      >

      Получить базовый<shared_library>

    2. <
      constmangled_storage&symbol_storage()const;
      >

      Прибавляется к искалеченному складу, который создается на строительстве.

      Бросает:

      Ничего.
  • <
    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.

    <mode>

    Режим, который будет использоваться при загрузке библиотеки.

    Броски:

    повышают::system::system_error в случае недостаточной памяти.
  • <
    voidload(constboost::filesystem::path&lib_path,
             boost::system::error_code&ec,
             load_mode::typemode=load_mode::default_mode);
    >

    Загружает библиотеку указанным путем с заданным режимом.

    Обратите внимание, что если какая-либо библиотека уже загружена в этом случае, загрузка вызовет разгрузку (), а затем загрузит новую предоставленную библиотеку.

    Параметры:

    <ec>

    Переменная, которая будет установлена на результат операции.

    <lib_path>

    Файл библиотеки. Может обрабатывать std::string, const char*, std::wstring, const wchar_t* или boost::filesystem::path.

    <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]Примечание

    При искалечении MSVC также проверит тип.

  • [6
  • <
    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]Примечание

    При искалечении MSVC также проверит тип возврата.

  • <
    template<typenameClass,typenameFunc>
     unspecifiedget_mem_fn(conststd::string&name)const;
    >

    Загрузить член-функцию из справочной библиотеки.

    Пример(импортный класс - MyClass, который доступен внутри библиотеки и хоста):

    <
    smart_librarylib("test_lib.so");
    typedefint    MyClass(*func)(int);
    typedefint MyClass(*func_const)(int)const;
    add_ints   f1=lib.get_mem_fn<MyClass,int(int)>            ("MyClass::function");
    add_doublesf2=lib.get_mem_fn<constMyClass,double(double)>("MyClass::function");
    
    >
    [Note]Примечание

    При искалечении MSVC также проверит тип возврата.

    Параметры:

  • Класс, в котором функция является членом. Если класс является const, то функция будет приниматься как принятие const этого указателя. То же самое касается летучих веществ.

    <Func>

    Подпись функции, необходимой для определения перегрузки

    Возвращает:

    Указатель на член-функцию с предоставленной подписью

    Броски:

    бустер::system::system_error, если символ не существует или если DLL/DSO не был загружен.
  • <
    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>

    <Signature>

    Подпись функции, необходимой для определения перегрузки. Тип возврата - это класс, который является конструктором.

    Возврат:

    Объект-конструктор.

    Броски:

    повышают::system::system_error, если символ не существует или если DLL/DSO не был загружен.
  • <
    template<typenameClass>destructor<Class>get_destructor()const;
    >

    Загрузите деструктор из указанной библиотеки.

    Пример[импортный класс - MyClass, который доступен внутри библиотеки и хоста]:

    <
    smart_librarylib("test_lib.so");
    destructor<MyClass>   f1=lib.get_mem_fn<MyClass>();
    
    >

    <Class><Class>

    <Class>
    <Class><Class>

    <Class>

    <Class>

    <Class>

    <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>();
    
    >

    <Class>

    [12 Класс, по которому загружается информация типа

    Возвращает:

    Ссылка на объект type_info.

    Броски:

    повышают::system::system_error, если символ не существует или если DLL/DSO не был загружен.
  • <
    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]Примечание

    Если тип псевдонима недостаточно велик для импортируемого класса, это приведет к неопределенному поведению.

    Предупреждение

    Фамилия будет применяться только для подписи типа, она не заменит токен в обозначенном названии.

    Параметры:

    <name>

    Название класса псевдоним для.

  • <
    voidunload()noexcept;
    >

    Разгружает общую библиотеку. Если библиотека была загружена несколько раз различными экземплярами, фактическая DLL/DSO не будет разгружена до тех пор, пока не будет по крайней мере один экземпляр, который ссылается на DLL/DSO.

    Пост-условия:

    это-и-это_загружен() возвращает ложное.

    Броски:

    Ничего.
  • <
    boolis_loaded()constnoexcept;
    >

    Проверьте, загружена ли библиотека.

    Бросок:

    Возвращение:

    истинно, если загружена библиотека.

    Ничего.
  • <
    booloperator!()constnoexcept;
    >

    Проверьте, не загружена ли библиотека.

    Возвращает:

    верно, если библиотека не была загружена.

    Броски:

    Ничего.
  • <
    explicitoperatorbool()constnoexcept;
    >bool() const

    bool() const

  • <
    boolhas(constchar*symbol_name)constnoexcept;
    >

    Поиск заданного символа в загруженной библиотеке. Работает для всех символов, включая имена псевдонимов.

    Параметры:

    <symbol_name>

    Название символа с нулевым окончанием. Может обращаться с std::string, char*, const char*.

    Возврат:

    <true>, если загруженная библиотека содержит символ с заданным именем.

    Броски:

    Ничего.
  • <
    boolhas(conststd::string&symbol_name)constnoexcept;
    >

    Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.

  • <
    smart_library&assign(constsmart_library&lib);
    >

    Делает эту долю тем же общим объектом, что и Либ. Если * это загружено, то разгружает его.

    Параметры:

    <lib>

    Библиотечный экземпляр для присвоения из.

    Последующие условия:

    lib.location() == this->location()

    Броски:

    повышают::system::system_error в случае недостаточной памяти.
  • <
    voidswap(smart_library&rhs)noexcept;
    >

    Обменяет две библиотеки. Не отменяет существующие символы и функции, загруженные из библиотек.

    Броски:


  • PrevUpHomeNext

    Статья Class smart_library раздела The Boost C++ Libraries BoostBook Documentation Subset Reference может быть полезна для разработчиков на c++ и boost.




    Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



    :: Главная :: Reference ::


    реклама


    ©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
    Top.Mail.Ru

    Время компиляции файла: 2024-08-30 11:47:00
    2025-05-20 00:29:57/0.011507987976074/1