我想使用luabridge将一个函数从一个Lua_State复制到另一个。
luabridge提供了一个名为addFunction(const char * name,FP fp)
的函数和一个名为getGlobal(lua_State* L,const char*)
的函数,它返回一个具有重载运算符的LuaRef
类型的对象。我正在使用multimap来存储我想要复制的函数的名称。
函数addFunction()
不支持使用指向类的指针,因此我无法直接传递getGlobal().operator()
//get all functions that match the Criteria
std::pair<acc_map_iter, acc_map_iter> range = sec_map->equal_range(acl);
//Add them to the first State
std::for_each(range.first, range.second, [&](acc_map_iter iter){
script->compilerContext->addFunction(iter->second.c_str(), [&](/*args...?*/)
{
return luabridge::getGlobal(sec_state, iter->second.c_str()).operator(/*args...?*/);
});
});
我可以以某种方式使lambda接受来自addFunction()
的多个参数。有诀窍还是根本不可能?
答案 0 :(得分:0)
我不确定我是否遇到了这个问题,但似乎你需要一个普通的lambda 是的,你可以拥有它们。这是一个最小的工作示例:
#include<utility>
struct S {
void g(int) { }
template<typename... Args>
void f(Args&&... args) {
auto fn = [this](auto&&... args){
g(std::forward<decltype(args)>(args)...);
};
fn(std::forward<Args>(args)...);
}
};
int main() {
S s;
s.f(42);
}
这是一个丑陋的陈述,就像涉及decltype
转发论点的陈述一样。