std::map<std::string, std::string>
myをクラス プロパティとして Luaに公開しようとしています。ゲッターとセッターにこのメソッドを設定しました:
luabind::object FakeScript::GetSetProperties()
{
luabind::object table = luabind::newtable(L);
luabind::object metatable = luabind::newtable(L);
metatable["__index"] = &this->GetMeta;
metatable["__newindex"] = &this->SetMeta;
luabind::setmetatable<luabind::object, luabind::object>(table, metatable);
return table;
}
このようにして、Lua で次のようなことができるようになります。
player.scripts["movement"].properties["stat"] = "idle"
print(player.scripts["movement"].properties["stat"])
ただし、C++ で提供したコードはコンパイルされません。metatable["__index"] = &this->GetMeta;
この行とその次の行に、オーバーロードされた関数へのあいまいな呼び出しがあることがわかります。これを正しく行っているかどうかはわかりません。
エラーメッセージ:
error C2668: 'luabind::detail::check_const_pointer' :
ambiguous call to overloaded function
c:\libraries\luabind-0.9.1\references\luabind\include\luabind\detail\instance_holder.hpp 75
これらは次SetMeta
のとおりですGetMeta
。FakeScript
static void GetMeta();
static void SetMeta();
以前は、ゲッターメソッドに対してこれを行っていました:
luabind::object FakeScript::getProp()
{
luabind::object obj = luabind::newtable(L);
for(auto i = this->properties.begin(); i != this->properties.end(); i++)
{
obj[i->first] = i->second;
}
return obj;
}
これは問題なく動作しますが、setter メソッドを使用できません。例えば:
player.scripts["movement"].properties["stat"] = "idle"
print(player.scripts["movement"].properties["stat"])
このコードでは、両方の行で getter メソッドをトリガーするだけです。セッターを使用できるようにすると、ここにあるプロパティからキーを取得できなくなり["stat"]
ます。
ここにLuaBindの専門家はいますか? ほとんどの人が、これまでにそれを使ったことがないと言っているのを見てきました。