繁体   English   中英

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

[英]variable arguments in lambda as function pointer

我想使用luabridge将功能从一个Lua_State复制到另一个。

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

函数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()多个参数。 有没有把戏,还是根本不可能?

我不确定是否遇到问题,但似乎您需要通用的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来转发参数的声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM