我在代码的不同地方使用< code>std::bind时遇到了很多问题。有时行得通,有时行不通,所以我认为我正在做一些根本错误的事情。
据我所知,std::bind
的以下基本用法应该可以正常使用:
#include <functional>
int foo(int a, int b){ return a+b; }
int main(){
using namespace std::placeholders;
// works
auto bar_auto=std::bind(foo,1,_2);
// compile error
std::function<int(int)> bar_fun=std::bind(foo,1,_2);
int quux=1;
// compile error
std::function<int(int)> bar_fun_lvalue=std::bind(foo,quux,_2);
}
当然< code>bar_auto的类型是< code>std::function
它类似于这个bug,但是它太老了,我不认为它是相关的。
gcc的输出并不特别有启发性:
在文件中包含从bindnew.cpp: 1:0: /usr/include/c /4.7/functional:在实例化'静态_Resstd::_Function_handler
2占位符意味着使用返回函子的第二个参数。因此
std::bind(foo,1,_2)
不是 std::函数
std::function<int(unspecified_type, int)>
获取
std::f
std::bind(foo, 1, _1)
// ^^
占位符位置对象(例如,当您使用_2
)不是您调用的函数中参数的位置,而是创建的可调用对象中参数的占位符。相反,总是从_1
开始,然后增加。
所以:
auto bar_auto=std::bind(foo,1,_1);
等。
这意味着你可以切换由std::bind
创建的对象中的参数,只需做类似
auto bar_auto=std::bind(foo,_2,_1);
当您“调用”< code>bar_auto对象时,第一个参数将是< code>foo的第二个参数,调用中的第二个参数将是< code>foo的第一个参数。
我在尝试用std::function和std::bind绑定方法时遇到了一个问题。 在我的通信服务类中: CommunicationService::ManageGetRequest签名: BindGET签名: 请求函数类型定义: BindGET上的错误: 错误C2664:“void RESTServer::BindGET(RequestFunction)”:无法从“std::\u Binder”
标准库函数bind()和function()定义于头文件<functional>中(该头文件还包括许多其他函数对象),用于处理函数及函数参数。bind()接受一个函数(或者函数对象,或者任何你可以通过”(…)”符号调用的事物),生成一个其有某一个或多个函数参数被“绑定”或重新组织的函数对象。(译注:顾名思义,bind()函数的意义就像它的函数名一样,是用来绑定函数调用的某些参数的。)例如: int
在过去的几个月里,我一直在学习C语言并使用终端。我的代码使用g和c11编译并运行得很好,但在过去几天里它开始出现错误,此后我在编译时遇到了问题。我唯一可以编译和运行的程序依赖于旧的C标准。 我第一次遇到的错误包括 尝试使用ecg$g-o stoi_试验stoi_试验编译。cpp-std=c 11 大堆cpp:13:22:错误:命名空间“std”中没有名为“stoi”的成员;你是说“阿托伊”吗?in
我有个问题。为什么我不能编译这个?怎么了? //此代码来自我之前帖子的答案 我有这样的错误: c:\ Program Files(x86)\ Microsoft Visual Studio 8 \ VC \ include \ algorithm(40):错误c 2784:“bool STD::operator = =(const _ Ty C:\Program Files (x86)\Micro
问题内容: 我正在使用angularjs 1.2.0-rc.3。我想将html代码动态地包含到模板中。为此,我在控制器中使用: 在模板中,我得到了: 它适用于常规html代码。但是,当我尝试放置角度模板时,它不会被解释,它仅包含在页面中。例如,我想包括: 非常感谢 问题答案: 此解决方案不使用硬编码模板,您可以编译嵌入在API响应中的Angular表达式。 步骤1. 安装此指令:https : /
在我的Fedora 34环境(g)中,定义为: 如果表达式已经是右值,那么