【发布时间】:2020-11-18 15:14:21
【问题描述】:
我开始制作自己的包管理器并开始开发依赖系统。 构建文件是用 lua 编写的,它们看起来像这样:
package = {
name = "pfetch",
version = "0.6.0",
source = "https://github.com/dylanaraps/pfetch/archive/0.6.0.tar.gz",
git = false
}
dependencies = {
"some_dep",
"some_dep2"
}
function install()
quantum_install("pfetch", false)
end
唯一的问题,我不知道如何转换
dependencies = {
"some_dep",
"some_dep2"
}
到一个全局 c++ 数组:["some_dep", "some_dep2"]
列表中任何作为字符串无效的内容都应被忽略。
有什么好方法可以做到这一点?
提前致谢
注意:我使用 C api 与 C++ 中的 lua 进行交互。不知道Lua的错误是使用longjmp还是C++异常。
【问题讨论】:
-
没有简单的方法。 1) 将每个 Lua 字符串推入 C API 栈并转换为 C 指针
lua_gettable + lua_tostring; 2)创建C数组; 3) 将 C 数组传递给 C 函数; 4) 只有在 C 函数退出后,您才能从 C API 堆栈中弹出所有 Lua 字符串。 -
这能回答你的问题吗? Convert Lua table to C array?
-
@Nifim - 使用字符串(与数字不同)时,您必须考虑 GC 可能带来的“惊喜”。
-
这很好,我没有真正想过一个字符串数组会如何使它成为一个不同的野兽。
-
你想对数组/向量做什么?立即对其进行操作然后丢弃它,将其保存到 C++ 全局或其他东西,或者将其作为用户数据传回 Lua?另外,您的 Lua 是否使用 C++ 编译,以便错误使用异常而不是 longjmp?如果列表中包含无效的内容,该怎么办?
标签: lua package-managers lua-c++-connection