编辑:最小化代码示例
#include <iostream>
#include <functional>
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <Wt/WServer>
Wt::WApplication *createApplication(const Wt::WEnvironment& env, int i) {
return new Wt::WApplication(env);
}
int main(int argc, char** argv)
{
Wt::WRun(argc, argv,boost::bind(&createApplication, _1, 1));
}
也因
Wt::WRun(argc, argv,std::bind(&createApplication, std::placeholders::_1, 1));
完全相同而失败。老例子
我正在使用Wt库,该库的函数
Wt::WRun()
将第三个参数作为函数,在本例中为application_creator
,该函数返回指向Wt类型的指针并接受一个参数。到现在为止还挺好。此函数是用户提供的,可能需要更多的参数,我需要这样做,并且lib的example也会显示出来(请参阅main.c,Wt::WSever::addEntryPoint
的参数与WRun
相同)。因此,我想像示例中那样绑定(bind)其他参数。我的解决方案可以使用gcc / mingw完美编译,但是使用MSVC / Visual Studio 2013 Express时,它会失败并显示以下错误
我的电话:
Wt::WRun(argc, argv,boost::bind(MDDB_Service::application_creator, _1, 5));
回调Wt::WApplication* MDDB_Service::application_creator(const Wt::WEnvironment& env, int foo);
的定义WT::WRun
的定义:#define WTCONNECTOR_API __declspec(dllimport)
typedef boost::function<WApplication* (const WEnvironment&)> ApplicationCreator;
int WTCONNECTOR_API WRun(int argc, char** argv,
ApplicationCreator createApplication = 0);
Wt::WRun(argc, argv,std::bind(MDDB_Service::application_creator, std::placeholders::_1, 5));
也一样最佳答案
问题实际上不是编译器的错误,而是以下行:
Wt::WEnvironment we();
它声明了一个名为
we
的函数,该函数不带任何参数并返回Wt::WEnvironment
。您正在成为the most vexing parse的受害者。替换为
Wt::WEnvironment we;
应该解决您的问题。
关于c++ - (boost::&& std::)绑定(bind)仅在参数很少的MSVC上失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31968857/