Я думаю о том, как спроектировать свои API, я планирую иметь приложение C++ со слоем сценариев в LUA.
Для нескольких ключевых моментов в моем дизайне я хотел бы дать пользователю возможность создать объект функции, который представляет то, что он хочет сделать в LUA, а затем отправить этот объект функции из LUA в C/C++.
В псевдокоде на С++ у меня есть class T
class T {
...
int num1 = 0;
float num2 = 0.0f;
std::string str{"NONE"};
...
};
И я хотел бы манипулировать экземпляром T
с function object
, предоставленным LUA, вот так
void applyFunc(T t,F f){
f(t);
}
Проблема в том, что я не могу найти в LUA ничего, что создавало бы функциональный объект, такой как лямбда C++11 или std::function
, или любой другой объект, который можно считать функциональным объектом.
На самом деле я хочу сказать: как определить объект функции, совместимый с C++, в LUA?
function
? Насколько я знаю, это больше похоже на старую простую функциюC
. 22.02.2014t
и позволяет ему вызывать для нее документированные методы. Lua позволяет это, используя позднее связывание, если хотите. Вам просто нужно написать связующий код на стороне C параметраuserdata
t
. 22.02.2014C
или указатель на функцию, мне нужен функциональный объект, что-то вроде лямбда C++ 11, пожалуйста, прочитайте вопрос. Ваши посты и комментарии интересны, но все они ОТ. 22.02.2014f(t
) на самом деле означает. Да, вы можете передатьt
(объект C++) вf
(функция Lua), но вы должны предоставитьf
возможность манипулироватьt
из Lua, иначе это совершенно бесполезно. Кажется, что ваши глаза тускнеют, когда вы видите, что объект C++ привязывается к Lua, но это именно то, что вам нужно. Без него вы не сможете реализоватьapplyFunc
. 23.02.2014