MSVC 10 + Luabind + std::vector == 拒绝编译
2010-9-2 18:17:51
收藏:0
阅读:156
评论:2
所以,我有一段代码,可以在MSVC 9和一些先前版本(不知道它往回走了多远...),GCC,MingW,Mac上的GCC编译。
但是,有一行在MSVC上不编译:
class_< vector<unsigned int> >("LayerList")
.def(constructor<>())
.def("GetCount", &vector<unsigned int>::size)
.def("Get", &NumberGet)
.def("Add", &vector<unsigned int>::push_back) //这一行不编译
.def("__tostring", &LayerListToString)
如果我注释它,应用程序就可以编译(但在运行时中断)。如果我将此块移动到其他位置(甚至是其他文件中),此特定行仍然会出现错误... 在块内更改顺序也不能解决它。
它会给出9个错误,其中大多数关于.def中的参数数量错误(有一些说有两个参数,当它期望1、3、5个参数时,有一个说“参数太多”),有些关于重载失败,最明显的是:
Error 7 error C2914: 'luabind::class_::def' : cannot deduce template argument as function argument is ambiguou E:\novashellSVN\clanlibstuff\novashell\source\ListBindings.cpp 178
这让我浪费了整整一天的工作时间...有人知道在MSVC 10上发生了什么变化吗?现在,它已经不再困扰我了,因为工作被卡住了,而是因为它有多令人困惑和奇怪。
编辑:我将“vector”文件与其他MSVC和GCC进行了比较,事实上,在MSVC中它有3个版本,有人确切地知道我如何使它加载特定版本吗?
这三个版本:
void push_back(const _Ty& _Val) // GCC和旧版MSVC中的版本,因此是我想要的
void push_back(_Ty&& _Val)
void push_back(bool _Val)
原文链接 https://stackoverflow.com/questions/3624306
点赞
stackoverflow用户72312
正如Nikko所说,您必须选择正确的重载函数。这是C++ PITA(痛点)。
使用static_cast<>
将push_back
转换为正确类型的ptr-to-mem-fn。例如以下内容:
.def("push_back", static_cast<void (std::vector<unsigned int>::*)(const unsigned int)>(&std::vector<unsigned int>::push_back))
(细节不是100%确定,但大概就是这样...)
2010-09-02 14:54:19
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
如果你有重载函数,你必须通过将"&vector::push_back"强制转换为正确的函数来指定要使用的函数。你必须查阅luabind文档以获取语法。
也许现在有几个名为"push_back"的方法,你必须指定使用哪一个?