lambda 中的可变参数作为函数指针

我想使用 luabridge 将一个 Lua_State 中的函数复制到另一个 Lua_State 中。

luabridge 提供了一个叫做 addFunction(const char * name,FP fp) 的函数和一个叫做 getGlobal(lua_State* L,const char*) 的函数,它返回一个类型为 LuaRef 的对象,该对象具有重载的运算符。我正在使用 multimap 存储我想要复制的函数的名称。

函数 addFunction() 不支持使用类指针,因此我不能直接传递 getGlobal().operator()

    //获取与标准匹配的所有函数
    std::pair<acc_map_iter, acc_map_iter> range = sec_map->equal_range(acl);

    //将它们添加到第一个状态中
    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() 接受多个参数?有什么技巧还是根本不可能?

点赞
用户4987285
用户4987285

我不确定我是否理解了问题,但看起来您需要一个通用的 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 的丑陋语句来转发参数的方式问题。

2016-05-22 10:29:08