例えばC++で次のように列挙体を定義して、そのままの名前でLuaスクリプト側でも使いたいわけです。
enum Enum1 { E1 = 0x200, E2, E3, E4, };
↓↓↓こう書きたい↓↓↓
if foo == E2 then bar() end
でもそれをやるには、定義した列挙体を全部Luaのグローバル変数として登録しなければなりません。
luabind::object g = luabind::globals(L); g["E1"] = E1; g["E2"] = E2; g["E3"] = E2; …
enum定義した後で、Luaの方にも登録しなければなりません。
列挙体を1個増やすと、ソースを2箇所直さないといけない…。
これをいちいちやるのは、列挙体がたくさんあるととても面倒なので、なんとかならないものかと思っていたのですが、Boost.Preprocessorを使って楽になりそうだったので試してみました。