Передача переменной Lua в C - PullRequest
3 голосов
/ 16 февраля 2011

Я встраиваю Lua в приложение C ++ и хочу предоставить функцию, похожую на print () (или, возможно, просто переопределить функцию печати Lua), чтобы я мог передавать переменные простых типов данных (string, boolean и number) в мой Приложение C ++ в виде строк.

Итак, я хочу иметь функцию C ++, которую я экспортирую в Lua, с именем my_print ()

Затем я могу вызвать my_print () в блоке Lua следующим образом:

a = 22/7
b = false
c = 42
my_print('The value of variable a is: ' .. a)
my_print('b: ' .. b)
my_print('c is: ' .. c)

Каждый раз, когда вызывается my_print (), он передает строку C ++ в приложение C ++. Я взглянул на Lua C API, подозреваю, что мне придется использовать lua_gettop (L), lua_type () и т. Д.

Очень хотелось бы получить небольшой фрагмент о том, как начать писать такую ​​функцию C / C ++, которую можно экспортировать в Lua и использовать способом, описанным выше.

Ответы [ 3 ]

4 голосов
/ 16 февраля 2011

Вы смотрели на реализацию print и других функций из стандартной библиотеки Lua?Вы можете начать с lmathlib.c.См. http://www.lua.org/source/5.1/.Попробуйте также etc/min.c из исходного архива.

1 голос
/ 17 февраля 2011

Вы должны взглянуть на это http://www.lua.org/source/5.1/lbaselib.c.html#luaB_tostring

Здесь они возвращают строку, но это хорошая отправная точка. Я не могу не согласиться с lhf, но это касается __tostring мета-таблицы, а min.c - нет. Я думаю, что это очень важно, особенно когда вы попадаете в Lua oo.

0 голосов
/ 16 февраля 2011

Если вы сделаете это так, как в своем примере, один аргумент my_print получает уже строку (или лучше lua_lstring), потому что значения приводятся к типу строки оператором конкатенации ...Только false вещь не будет работать.так что просто пропуск tostring(var) будет работать в большинстве случаев.Для большего контроля вы можете взглянуть на string.format.

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