На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Странный синтаксис в библиотеке , LuaBind
    Приветствую.

    Заинтересовался либой LuaBind. Читаю доку, разбираю примеры. И тут попался странный хлоуворлд:

    ExpandedWrap disabled
      #include <iostream>
      #include <luabind/luabind.hpp>
       
      void greet()
      {
          std::cout << "hello world!\n";
      }
       
      extern "C" int init(lua_State* L)
      {
          using namespace luabind;
       
          open(L);
       
          module(L)                      // Что это за конструкция такая?
          [                              //
              def("greet", &greet)       //
          ];                             //
       
          return 0;
      }


    Код вроде бы С++, но то, что я выделил комментами ... не пойму. Что это?
    Собственно в этом вопрос.
      Цитата JoeUser @
      Что это?
      Собственно в этом вопрос.

      Возможно, это доступ к массиву.
      Функцмя "module" возвращает указатель.
      Функция "def" - возвращает индекс массива. Например, int.
      ---
      Можно для начала попытаться узнать, что это за функции - module и def.
      Сообщение отредактировано: ЫукпШ -
        Цитата ЫукпШ @
        Возможно, это доступ к массиву.

        Да, так и есть. Сбили с толку "разнесенные" скобки :lol:
          Если это был просто доступ к массиву, то почему возвращаемое значение никак не используется? Думаю, что module(L) возвращает экземпляр некого класса переопределённым оператором [], который и вызывает функцию greet.
            Цитата JoeUser @
            Подозреваю, module возвращает массив дескрипторов подгруженных модули, а def получает индекс модуля в этом массиве по его имени (может ещё и подгружает его, если надо). Возможно, что это инициализация модуля 'greep'.

            Добавлено
            Но, по-моему, LuaBind это даже не C++, а чистый C.

            Добавлено
            Хотя, может быть, это C++-обёртка над C-библиотекой Lua.
              Цитата amk @
              Подозреваю, module возвращает массив дескрипторов подгруженных модули, а def получает индекс модуля в этом массиве по его имени (может ещё и подгружает его, если надо). Возможно, что это инициализация модуля 'greep'.

              module() возвращает класс, у которого переопределён оператор [], в котором добавляются элементы
                Цитата Олег М @
                module() возвращает класс, у которого переопределён оператор [], в котором добавляются элементы

                Именно.
                Цитата amk @
                Хотя, может быть, это C++-обёртка над C-библиотекой Lua.

                Именно.

                :)
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0412 ]   [ 17 queries used ]   [ Generated: 18.04.24, 10:54 GMT ]