我試圖將我的std::map<std::string, std::string>
作爲類屬性公開給Lua。我設置爲我的getter和setter這種方法:如何使用LuaBind將std :: map綁定到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();
以前我是做這行的getter方法:
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方法。雖然如果讓我使用setter,我將無法從這裏獲得["stat"]
的屬性。
這裏有沒有LuaBind的專家?我見過大多數人說他們以前從未與之合作過。
把你看到它的完整的錯誤信息,請在你的問題。 – greatwolf
@greatwolf我把它。 – MahanGM
錯誤應該顯示候選職能是什麼。 – greatwolf