Переменные аргументы в лямбде как указатель на функцию
Я хочу скопировать функцию из одного Lua_State в другой, используя luabridge.
Luabridge предоставляет функцию под названием addFunction(const char * name,FP fp)
и функция называется getGlobal(lua_State* L,const char*)
который возвращает объект типа LuaRef
который перегружен операторами. Я использую мультикарту для хранения имен функций, которые я хочу скопировать.
функция 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...?*/);
});
});
Можно ли как-нибудь заставить лямбду принимать несколько аргументов из addFunction()
, Есть ли хитрость или это просто невозможно?
1 ответ
Я не уверен, что у меня проблема, но кажется, что вам нужна общая лямбда.
Да, вы можете иметь их. Вот минимальный рабочий пример:
#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
выдвинуть аргументы.