无法将 emplace_back 插入到同时也是函数的 vector 中
2020-12-7 8:4:3
收藏:0
阅读:142
评论:1
所以,我正在尝试将 lua 字节码指令 emplace_back 到一个 vector 中,问题在于这个函数的类型是 vector,我正在尝试将其 emplace_back 到函数自身,这样我就可以声明一个向翻译器 vector 中的 vector。 例如:
std::vector<Instruction*> translate_instr(lua_State* L, Proto* vP, int idx) {
auto vanilla_instr = vP->code[inum];
auto vanilla_op = GET_OPCODE(vanilla_instr);
auto custom_instr_32 = U_CREATE_INSTR(); // 创建新的自定义指令
switch (vanilla_op) {
case OP_CALL:
case OP_TAILCALL: {
U_SET_OPCODE(luau_instr_32, custom_opcodes::MLUA_OP_CALL); // 将操作码的字节标识符设置为 OP_CALL 的自定义字节标识符
U_SETARG_A(luau_instr_32, GETARG_A(vanilla_instr)); // 将第一个参数设置为自定义 a 参数
U_SETARG_B(luau_instr_32, GETARG_B(vanilla_instr)); // 将第二个参数设置为自定义 B 参数
U_SETARG_C(luau_instr_32, GETARG_B(vanilla_instr)); // 将第三个参数设置为自定义 C 参数
translate_instr.push_back(custom_instr_32);
break;
}
}
}
translate_instr.push_back(custom_instr_32); 这行不起作用。
这是我想要调用它的方式:
auto* L = luaL_newstate();
luaL_openlibs(L);
auto lcl = reinterpret_cast<const LClosure*>(lua_topointer(L, -1));
auto p = lcl->p;
for (auto i = 0; i < p->sizecode; ++i) {
std::vector<Instruction*> custom_instr_vec[i] = translate_instr(L, P, i);
}
与我类似的东西对我来说是好的,我只是累了,无法想出解决方法。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

不完全清楚你想干嘛,但我假设你需要:
std::vector<Instruction*> custom_instr_vec; for (auto i = 0; i < p->sizecode; ++i) { custom_instr_vec.push_back(translate_instr(L, P, i)); }std::vector<Instruction*> custom_instr_vec[i]将会声明一个大小为i的向量数组,但由于i不是编译时常数,所以它不是有效的 c++。在
translate_instr中,你需要声明一个向量来保存结果并将其返回:std::vector<Instruction*> translate_instr(lua_State* L, Proto* vP, int idx) { std::vector<Instruction*> result; auto vanilla_instr = vP->code[inum]; auto vanilla_op = GET_OPCODE(vanilla_instr); auto custom_instr_32 = U_CREATE_INSTR(); // 创建新的自定义指令 switch (vanilla_op) { case OP_CALL: case OP_TAILCALL: { U_SET_OPCODE(luau_instr_32, custom_opcodes::MLUA_OP_CALL); // 将操作码的字节识别符设置为 OP_CALL 的自定义字节识别符 U_SETARG_A(luau_instr_32, GETARG_A(vanilla_instr)); // 将第一个参数设置为自定义 a 参数 U_SETARG_B(luau_instr_32, GETARG_B(vanilla_instr)); // 将第二个参数设置为自定义 b 参数 U_SETARG_C(luau_instr_32, GETARG_B(vanilla_instr)); // 将第三个参数设置为自定义 c 参数 result.push_back(custom_instr_32); break; } } return result; }