2016-05-22 6 views
2

luabridgeを使用して、あるLua_Stateから別のLua_Stateに関数をコピーしたいとします。関数ポインタとしてのラムダの可変引数

luabridgeにはaddFunction(const char * name,FP fp)というファンクションがあり、getGlobal(lua_State* L,const char*)というファンクションは、オーバーロードされた演算子を持つタイプLuaRefのオブジェクトを戻します。私はマルチマップを使用して、コピーしたい機能の名前を保存しています。

機能addFunction()したがって、私は何とかラムダは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...?*/); 
     }); 
    }); 

を渡すことはできません、クラスへのポインタの使用をサポートしていません。トリックはありますか、それとも単純に不可能ですか?

+0

あなたの質問は少し難しいですが、おそらく 'std :: bind()'を使うことができますか? –

+0

申し訳ありませんが、これはかなり奇妙な質問だと思います。可変量の議論を通過するように支援を結びつけるだろうか? – Raphl10

答えて

0

私は問題を抱えてわからないんだけど、あなたが一般的なラムダを必要とするようです。
はい、あなたはそれらを持つことができます。ここでは、最小限の作業例です。

#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を伴うような醜い文の問題です。

+0

私の場合は、f()を使って引数の型を推論することができなかったので、私の場合はこれはうまくいかないと思います。 – Raphl10

関連する問題