gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:50:13 25 4
gpt4 key购买 nike

编辑:最小化代码示例

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

Error 94 error C2198: 'Wt::WApplication *(__cdecl *)(const Wt::WEnvironment &,int)' : too few arguments for call \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它具有函数 Wt::WRun(),该函数将一个函数作为第三个参数,在本例中为 application_creator,它返回一个指向 Wt 类型的指针并接受一个参数.到目前为止,一切都很好。这个函数是用户提供的,可能需要更多的参数,我这样做了,还有一个 example lib 显示(参见 main.c,Wt::WSever::addEntryPoint 采用与 WRun 相同的参数)。

所以我想像示例中那样绑定(bind)我的附加参数。我的解决方案与 gcc/mingw 完美编译,但与 MSVC/Visual Studio 2013 Express 编译失败,出现错误

Error 94 error C2198: 'Wt::WApplication *(__cdecl *)(const Wt::WEnvironment &,int)' : too few arguments for call ...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)); 相同

Error 94 error C2198: 'Wt::WApplication *(__cdecl *)(const Wt::WEnvironment &,int)' : too few arguments for call ... include\boost\function\function_template.hpp

最佳答案

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com