如何检测sol3中是否存在用户类型?



在c++中使用sol3,我的代码是这样的


sol::state _state;
void Func1()
{
auto userType1 = _state.new_usertype<Test>("Test", sol::constructors<Test()>());
userType1["testFunction1"] = &test1;
}
void Func2()
{
auto userType2 = _state.new_usertype<Test>("Test", sol::constructors<Test()>());
userType2["testFunction2"] = &test2;
}
int main()
{
Func1();
Func2();
}
在lua脚本中,我只能调用Test。testFunction2,这意味着userType2覆盖userType1。lua脚本看不到testFunction1。我想知道是否有一种方法来返回userType如果存在,并创建它,如果不存在。然后我可以同时调用testFunction1和testFunction2。如下面的代码所示:
void Func1()
{
auto userType1 = _state.CreateOrGetUserType<Test>("Test", sol::constructors<Test()>());
userType1["testFunction1"] = &test1;
}
void Func2()
{
auto userType2 = _state.CreateOrGetUserType<Test>("Test", sol::constructors<Test()>());
userType2["testFunction2"] = &test2;
}

首先检查_state["Test"]是否存在(如果您真的很偏执,检查它是否是一个表)。如果是这样,使用它来构造一个sol::usertype<Test>,您可以向其中添加第二个函数。如果没有,请创建一个新的用户类型。

最新更新