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) //this line refuses to compile
.def("__tostring", &LayerListToString)

如果我评论它,应用程序编译得很好(但在运行时中断),如果我将此块移动到其他地方(甚至在其他文件中),这个特定的行会不断给出错误......改变块内的顺序也不能解决它。

它给出了 9 个错误,其中大多数是关于 .def 中参数数量错误的错误(有人说当它期望 1、3、5 时有 2 个参数,一个说“参数太多”),还有一些关于重载失败,最明显一:

错误 7 错误 C2914: 'luabind::class_::def' : 无法推断模板参数,因为函数参数不明确 E:\novashellSVN\clanlibstuff\novashell\source\ListBindings.cpp 178

这让我浪费了整个工作日......有人知道MSVC 10上发生了什么变化导致这种情况吗?它甚至不再因为工作卡住而困扰我,而是因为它是多么令人费解和奇怪。

编辑:我将来自 MSVC 10 的“矢量”文件与其他 MSVC 和 GCC 进行了比较,实际上在 MSVC 中它有 3 个版本,有人知道我是如何让它加载特定版本的吗?

三个版本:

void push_back(const _Ty& _Val) //the one in GCC and older MSVC, thus the one I want
void push_back(_Ty&& _Val)
void push_back(bool _Val)
4

2 回答 2

1

As Nikko says, you must select the correct overload. This is a bit of C++ PITA.

Use static_cast<> to cast push_back to a ptr-to-mem-fn of the correct type. i.e. something like the following:

.def("push_back", static_cast<void (std::vector<unsigned int>::*)(const unsigned int)>(&std::vector<unsigned int>::push_back))

(not 100% sure of details, but thats the general gist of it...)

于 2010-09-02T14:54:19.440 回答
0

如果您有重载函数,您必须通过将“&vector::push_back”转换为正确的函数来指定要使用的函数。您必须检查 luabind 文档的语法。

Maybe now there is several methods named "push_back" and you must specify which one to use?

于 2010-09-02T09:19:55.813 回答