Какая польза от компиляции Lua как C ++, кроме как избегать 'extern C' и получать 'исключение C ++'? - PullRequest
9 голосов
/ 06 декабря 2011

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

Мой вопрос, помимо этих двух отличий, есть ли еще какое-то реальное преимущество для компиляции кода Lua в виде кода C ++?Эти два на самом деле не убеждают меня, так как, 1) меня не беспокоит обертывание заголовков c 'extern C', 2) наш проект не допускает исключения, поэтому я должен изменить в luaconf.h, чтобы использоватьlongjump / setjump в любом случае.

Ответы [ 2 ]

9 голосов
/ 06 декабря 2011

Эти являются преимуществами компиляции Lua в C ++. Суть extern "C" даже не в этом; все дело в обработке исключений. И хотя ваше приложение запрещает исключения, не каждое приложение C ++ делает это.

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

Других преимуществ компиляции Lua как C ++ нет. Обработка исключений является причиной, по которой Lua может быть скомпилирована как C ++.

2 голосов
/ 07 декабря 2011

Еще один способ думать об этом может заключаться в том, чтобы перевернуть вопрос с ног на голову и спросить: "Есть ли какая-то польза от компиляции Lua в C (если мы уже используем C ++)?"Преимущество компиляции Lua в C - и, насколько я знаю, нет - и вы уже используете C ++ для своего другого кода, компиляция Lua в C ++ тоже кажется более простой и потенциально немного более надежной, потому что выникогда не иметь фреймов стека не-C ++, чтобы испортить перемотку стека, если обратный вызов в C ++ из Lua случайно выдал ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...