Расширение приложения C ++ с помощью встроенных сценариев - PullRequest
2 голосов
/ 15 января 2012

Я занимаюсь разработкой приложения на C ++, которое должно быть совместимо с несколькими платформами (Windows / Linux), и хочу предоставить пользователям возможность расширять программное обеспечение в соответствии с их потребностями, не позволяя им изменять критически важные части приложения (поэтому я не хочу их в коде C ++).

Я ищу встраивать язык сценариев (я бы предпочел Python, потому что я уже знаком с ним, но это не обязательно), поэтому сценарии, помещенные в какую-либо папку плагинов, могут манипулировать объектами приложения, если я хочу объекты, подлежащие изменению.

Самый простой пример: если кто-то хочет создать свой собственный интерфейс для моего приложения, он должен сделать это с помощью такого скрипта.

Проблема, однако, в том, что я никогда не соединял C ++ и любые внешние скрипты вместе, поэтому я действительно не знаю, как начать. После поиска материала для начала я обнаружил, что Lua утверждает, что является хорошим языком для этого, но я не смог найти хорошие учебники для начинающих.

Я был бы очень признателен, если бы кто-то знал, с чего начать, будь то онлайн-ресурсы или хорошая книга. Я не против потратить несколько долларов на хорошую книгу.

Как ученик, я лучше учусь на примере кода и нескольких строк, объясняющих это.

Ответы [ 4 ]

6 голосов
/ 16 января 2012

Я бы предложил вам прочитать Программирование на Lua , в этой книге есть целый раздел о том, как встраивать Lua в C (и C ++).

Это очень высоко оценено пользователями Amazon .

Язык также довольно неплохо электронная документация и активный список рассылки .

3 голосов
/ 16 января 2012

Если вы хотите использовать Python, я бы определенно предложил использовать Boost.Python . Это невероятно хорошо спроектированная библиотека. Просто пример: все, что вам нужно сделать, чтобы представить класс C ++ для Python, это:

struct World
{
    void set(std::string msg) { this->msg = msg; }
    std::string greet() { return msg; }
    std::string msg;
};

BOOST_PYTHON_MODULE(hello)
{
    class_<World>("World")
        .def("greet", &World::greet)
        .def("set", &World::set)
    ;
}

Он обрабатывает почти все автоматически: преобразования между типами, исключения, он даже позволяет использовать объекты с подсчетом ссылок между двумя языками с boost::shared_ptr.

1 голос
/ 16 января 2012

Статья здесь, в журнале linux - хорошее место для начала того, как встроить интерпретатор python в ваш код на c / c ++. Однако это только полдела, потому что, когда встроенный интерпретатор встроен, вам необходимо опубликовать часть своего программного обеспечения в среде сценариев. Основной API для этого находится в C, и если большая часть вашего кода - C ++, может быть лучше использовать boost :: python, так как написание оберток C вокруг ваших классов C ++ может быть громоздким. Вы также можете использовать Py ++ для генерации привязки boost :: python.

Если вы хотите использовать сценарии только как дверь к настройке и можете жить с объемом памяти python, это может быть лучшим выбором, чем Lua. Lua, как правило, хорош для небольшой среды, такой как разработка игр. Существует также гораздо больше разработчиков Python, чем разработчиков lua, а также доступно больше встроенных модулей и сторонних библиотек.

0 голосов
/ 15 января 2012

для Python, я думаю, что библиотека Boost предназначена для этого. Что касается Lua, я не использовал его сам, но быстрый поиск в Google сначала привел меня к debian admin , а затем к Lua's C interface . Вы смотрели на них?

...