我在尝试用std::function和std::bind绑定方法时遇到了一个问题。
在我的通信服务类中:
this->httpServer->BindGET(std::bind(&CommunicationService::ManageGETRequest, this, std::placeholders::_1));
CommunicationService::ManageGetRequest签名:
MessageContent CommunicationService::ManageGetRequest(std::string uri, MessageContent msgContent)
BindGET签名:
void RESTServer::BindGET(RequestFunction getMethod)
请求函数类型定义:
typedef std::function<MessageContent(std::string, MessageContent)> RequestFunction;
BindGET上的错误:
错误C2664:“void RESTServer::BindGET(RequestFunction)”:无法从“std::\u Binder”转换参数1
之前,我的请求函数是这样的:
typedef std::function<void(std::string)> RequestFunction;
它工作得很好。(当然,所有签名方法都已调整)。
我不明白是什么导致了这个错误。
改变
this->httpServer->BindGET(
std::bind(&CommunicationService::ManageGETRequest, this, std::placeholders::_1)
);
到
this->httpServer->BindGET(
[this](std::string uri, MessageContent msgContent) {
this->ManageGETRequest(std::move(uri), std::move(msgContent));
}
);
使用std::bind几乎总是一个坏主意。lambda解决了同样的问题,而且几乎总是做得更好,并提供更好的错误消息。在std::bind
具有lambda特性的少数情况下,C 14没有涵盖这些特性。
std::bind
是在lambda之前的c11中作为boost::bind
编写的,然后与lambda同时纳入标准。当时,lambdas有一些限制,因此std::bind
是有意义的。但这并不是lambdas C 11限制出现的情况之一,而且随着lambda在此后的发展,学会使用std::bind
在这一点上显著降低了边际效用。
即使你掌握了std::bind
,它也有很多恼人的怪癖(比如传递一个bind表达式来绑定),避免它也有好处。
您还可以通过以下方式进行修复:
this->httpServer->BindGET(
std::bind(&CommunicationService::ManageGETRequest, this, std::placeholders::_1, std::placeholders::_2)
);
但我认为你不应该。
好吧,为了大学,我正在做一些SQL作业,但是我不知道这里有什么问题...坚持了几个小时。 所以在这里我创建了一个函数: 然后我尝试插入一个新行: 继续获取此错误: 错误:函数ins_notitie(未知,带时区的时间戳,未知,带时区的时间戳)不存在 第1行:选择ins_notitie('100001',now(),'Test note',now()) 错误:函数ins_notitie(未知,带时区
问题内容: 此SQL: 产生以下错误: 参数数据类型varchar对于格式函数的参数1无效。 是一个 运行SQL Server 2012 问题答案: 不支持作为的第一个参数。支持的数据类型的唯一类别是和。 你可以做 来自levelonehuman的评论:文档
我有碱基错配的DNA扩增子,这可能会在PCR扩增过程中出现。我感兴趣的是,给定每个碱基的错误率、错配数和扩增子中碱基的数量,序列包含错误的概率是多少。 我偶然看到一篇文章[Cummings,S.M.et al(2010).群体遗传分析中PCR、克隆和测序错误的解决方案.保守遗传学,11(3),1095-1097.DOI:10.1007/S10592-009-9864-6]提出了在这种情况下计算概率
运行下面的函数时,出现以下错误: Invoke-Command:无法验证参数“ComputerName”上的参数。参数为null或为空。请提供一个不为null或空的参数,然后重试该命令。位于C:\ Users \ username one \ Desktop \ script . PS1:16 char:29 Invoke-Command-computer name 你知道我做错了什么吗?
本文向大家介绍PHP错误处理函数,包括了PHP错误处理函数的使用技巧和注意事项,需要的朋友参考一下 在 PHP 中,默认的错误处理很简单。一条错误消息会被发送到浏览器,这条消息带有文件名、行号以及描述错误的消息。 PHP 错误处理 在创建脚本和 Web 应用程序时,错误处理是一个重要的部分。如果您的代码缺少错误检测编码,那么程序看上去很不专业,也为安全风险敞开了大门。 本教程介绍了 PHP 中一些
我有一个继承自父类Point的子类行,我没有在子类中使用基类的构造函数,但是我得到了这个错误: '形状。点“不包含接受0个参数的构造函数 这是我的父类: 这是我的孩子班: