Şu anki projemde, Lua sarma makinelerine çok fazla C/C++ yazdım. Bunların büyük bir kısmı basit belirleyiciler ve odaklar, bu yüzden, bu kolay bu oluşturulmasına yardımcı öylesine gibi bazı şablonları yazmayı başardı: Ben keyfi fonksiyonlar için basit fonksiyon sarýcýlarý benzer bir şey yapmak istiyorumGenel bir Lua işlev sarıcı yapmak için variadic şablonları nasıl kullanılır?
// Class Return Field
template <typename T, typename U, U T::*Member>
int luaU_get(lua_State* L)
{
T* obj = luaW_check<T>(L, 1);
luaU_push<U>(L, obj->*Member);
return 1;
}
static luaL_reg Foo_Table[] =
{
...
// Now I can just use this generic template to avoid
// writing simple getter functions
{ "getbar", luaU_get<Foo, Bar, &Foo::bar> },
...
};
çok. Örneğin, bu yapabilmek için iyi olurdu:
template <typename T, typename U, U (T::*Func)(), typename... Args>
int luaU_func(lua_State* L)
{
// ...?
}
static luaL_reg Foo_Table[] =
{
...
{ "baz", luaU_func<Foo, int, &Foo::baz, int, float> },
...
};
fikri derlenmiş zaman şablon etkili bu haline gelmek olduğunu:
int luaU_func(lua_State* L)
{
luaU_push<int>(L, luaW_check<Foo>(L, 1)->baz(luaU_check<int>(L, 2), luaU_check<float>(L, 3)));
return 1;
}
denedim sadece kullanılarak ...
expander, benim için problem uygun argümanlara eşlenecek tamsayı indeks değerleridir. Onları doğru şekilde çalıştırmanın bir yolunu düşünemiyorum. Böyle bir şey mümkün mü?
(sihirli zaten burada devam biraz var; ben lua_push ve lua_check gibi şeyler için bazı templated sarmalayıcılarını yazdığı bu mevcut sarmalayıcılarının tamamı here bulunabilir.)
[luabind] 'e bakabilirsiniz mu (http://www.rasterbar.com/products/luabind.html)? –
Luabind'i kullanmanızı mı öneriyorsunuz? Ya da referans için kullanabileceğim benzer bir sorunu çözdüler mi? (Projem için bir dizi nedenden dolayı luabind kullanmak istemiyorum.) – Alex
Sadece bunu biliyor olsaydınız emin değildim. Her neyse, argüman & index problemi için, [burada temel fikir] (http://stackoverflow.com/a/8028333/168225). –