从外部文件循环填充结构体

我有一个包含此表的 lua 脚本:

test = {}
test[1] = "Naya"
test[2] = 1000
test[3] = 1
test[4] = 20

我有一个结构体在我的 C++ 程序中。旨在用该表中包含的信息填充:

// 敌人结构体
struct Enemy
{
    string name;
    int health;
    int family;
    int level;
} enemy;

对于已知大小和已知键名的表,填充结构体相对容易。

当存在以下情况时,它变得稍微具有挑战性:

  • 一个未知大小的表(查找表长度简单)
  • 数字键名(简单地使用 i)
  • 填充结构体(我遇到了问题的部分)

我想要的是使用简单的 for 循环填充这个结构体,像这样:

for (int i = 1; i < 长度; i++)
        {
            lua_pushnumber(L, i);
            lua_gettable(L, -2);
            if (lua_isnumber(L, -1))
                enemy.at(i)? = lua_tonumber(L, -1);
            else
                enemy.at(i) ? = lua_tostring(L, -1);

            lua_pop(L, 1);
        }

结构体没有 .at(x) 函数。因此,我无法使用这个简单的循环迭代结构体来填充它。

我曾考虑过使用一个带有向量/结构体的二维数组。但我不确定这是否有效。

我希望通过循环从 lua 脚本中填充结构体的数据。

点赞
用户7414220
用户7414220

如果需要处理来自不同大小的信息吗?否则,您可以通过像这样分配值来始终填充它:Enemy.name = ...; 或者,您可以将数据编写到 .csv 文件(逗号分隔值,以防万一),然后将其读入结构中。

如果只需一次性处理信息,则可以像这样初始化结构体:Enemy enemy = Enemy{name,...};

希望这可以帮助 :)

2019-08-06 19:23:42
用户11881207
用户11881207

我认为有三种方法可以实现这个:

1)_最简单的_,创建一个向量,逐行读取文件,解析 ...=? 后面的内容,然后将其放入向量中,可能转换为字符串。因此,你将使用 std::vector<string> 存储所有东西。

2)_较为困难_,你可以使用 class,并动态地在其中填充 std::vector<Object*>。与上面相同,但现在你可以保存为 intstring 等。

3)_最难_,你需要实现一种反射形式。这是我能找到的内容:How can I add reflection to a C++ application?

这真的是一篇不错的阅读。

2019-08-06 20:57:50