编辑:最小化代码示例

#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/

10-12 05:46