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

C++ MSVC 10+;Luabind+;std::vector==拒绝编译,c++,visual-studio-2010,vector,std,luabind,C++,Visual Studio 2010,Vector,Std,Luabind,所以,我有一个代码,在MSVC 9上编译,还有一些以前的代码(不知道有多远了…),GCC,MingW,Mac上的GCC 但有一行,不在MSVC上编译: class_< vector<unsigned int> >("LayerList") .def(constructor<>()) .def("GetCount", &vector<unsigned int>::size) .def("Get", &NumberGet) .def(

所以,我有一个代码,在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)

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


也许现在有几种名为“push_back”的方法,您必须指定使用哪种方法?

正如Nikko所说,您必须选择正确的重载。这是一个C++的PITA。< /P> 使用static_cast将push_转换回正确类型的ptr至mem fn。i、 e.类似于以下内容:

.def("push_back", static_cast<void (std::vector<unsigned int>::*)(const unsigned int)>(&std::vector<unsigned int>::push_back))
.def(“向后推”,静态施法(&std::vector::向后推))
(不是100%确定细节,但这是它的一般要点…)

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