(boost ::&& std::)绑定仅在参数太少的MSVC上失败

时间:2015-08-12 14:59:37

标签: c++ c++11 boost wt

编辑:最小化代码示例

#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));
}
  

错误94错误C2198:&#39; Wt :: WApplication *(__ cdecl *)(const Wt :: WEnvironment&amp;,int)&#39; :调用的参数太少\ wt-3.3.4-msvs2013-windows-x86-sdk \ include \ boost \ function \ function_template.hpp 95 1

同样失败,Wt::WRun(argc, argv,std::bind(&createApplication, std::placeholders::_1, 1));出现完全相同的错误。

旧例子

我使用具有函数Wt::WRun()的库Wt,该函数将第3个参数作为函数,在本例中为application_creator,它返回指向Wt的指针输入并接受一个参数。到现在为止还挺好。这个函数是用户提供的,可能需要更多的参数,我这样做,并且还有一个example的lib节目(参见main.c,Wt::WSever::addEntryPoint采用与WRun相同的参数)。

所以我想绑定我的附加参数,如示例中所示。我的解决方案与gcc / mingw完美编译,但是使用MSVC / Visual Studio 2013 Express,它失败并出现错误

  

错误94错误C2198:&#39; Wt :: WApplication *(__ cdecl *)(const Wt :: WEnvironment&amp;,int)&#39; :调用的参数太少了...... include \ boost \ function \ function_template.h

我的电话: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));

相同
  

错误94错误C2198:&#39; Wt :: WApplication *(__ cdecl *)(const Wt :: WEnvironment&amp;,int)&#39; :调用的参数太少... include \ boost \ function \ function_template.hpp

1 个答案:

答案 0 :(得分:2)

问题实际上不是编译器的错,而是这一行:

Wt::WEnvironment we();  

它声明了一个名为we的函数,它不带参数并返回Wt::WEnvironment。你是the most vexing parse的受害者 用

替换该行
Wt::WEnvironment we;  

应该解决你的问题。