【发布时间】:2021-07-25 00:53:33
【问题描述】:
在做一个使用 .lua 文件来读取参数值的游戏引擎时,当我不得不读取这些值并将它们分配给 C++ 中每个组件的参数时,我陷入了困境。我试图调查 Unity 的工作方式,但没有找到(我开始怀疑 Unity 是否必须这样做)。
我希望参数自动初始化,无需用户执行
myComponentParameter = readFromLuaFile("myParameterName")
每个参数。
我最初的想法是使用 std::variant 类型,并存储一个变体数组以便自动读取它们。我的问题是:
- 首先,我不知道如何知道std::variant目前存储的类型(尝试使用std::variant::type,但它不适用于模板),在为了从无类型的 .lua 值转换为 C++ 值。作为参考,我的组件初始化如下所示:
bool init(luabridge::LuaRef parameterTable)
{
myIntParameter = readVariable<int>(parameterTable, "myIntParameter");
myStringParameter = readVariable<std::string>(parameterTable, "myStringParameter");
return true;
}
(readVariable 函数已经写好了in this question,如果你好奇的话)
-
第二个问题是用户在想要访问变体存储的值时必须编写 std::get(myIntParameter); ,这听起来比制作更糟糕用户读取参数值。
-
第三个问题是我无法创建 std::variant
的数组,这是为了自动初始化参数而我想做的。 p>
对于这种不需要init函数,用户不需要手动设置参数值的情况,有什么好的解决方案吗?
提前致谢。
【问题讨论】:
-
哪个代码应该知道值的类型?
-
@spectras 我需要参数初始化时的值类型(当我使用 readVariable 时),因为 Lua 是一种无类型语言,我需要转换为C++ 类型。例如,我想做以下事情:
readVariable<myVariant.type>( ... ) -
是的。并且要实际使用特定值(例如,假设您有一些
timeout变量),您最终需要将其转换为一个数字 - 比如说 int。因此,您的一段代码必须嵌入timeout的正确类型是int的知识。该部分通常会测试类型是否正确并提取值。
标签: c++ lua components game-engine