MSVC 10 + Luabind + std::vector == 拒绝编译

所以,我有一段代码,可以在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用户329564
stackoverflow用户329564

如果你有重载函数,你必须通过将"&vector::push_back"强制转换为正确的函数来指定要使用的函数。你必须查阅luabind文档以获取语法。

也许现在有几个名为"push_back"的方法,你必须指定使用哪一个?

2010-09-02 09:19:55
stackoverflow用户72312
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