Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 以下示例中Boost::bind中占位符的角色_C++_Boost Bind - Fatal编程技术网

C++ 以下示例中Boost::bind中占位符的角色

C++ 以下示例中Boost::bind中占位符的角色,c++,boost-bind,C++,Boost Bind,关于占位符的使用,有很多这样的例子,但是我仍然有点困惑,如果有人能解释以下两种说法之间的区别,我将不胜感激 void SomeMethod(int a) { std::cout << "Parameter pass " << a << "\n"; } Statement 1 : boost::bind(&SomeMethod,_1)(12); Statement 2 : boost::bind(&SomeMethod,12)();

关于占位符的使用,有很多这样的例子,但是我仍然有点困惑,如果有人能解释以下两种说法之间的区别,我将不胜感激

void SomeMethod(int a)
{
    std::cout << "Parameter pass " << a << "\n";
}

Statement 1 : boost::bind(&SomeMethod,_1)(12);

Statement 2 : boost::bind(&SomeMethod,12)();
void方法(int a)
{

占位符的一个用途是更改特定函数的参数顺序

以boost为例,假设你之前有
f(x,y)
g(x,y,z)

bind(f, _2, _1)(x, y);                 // f(y, x)    
bind(g, _1, 9, _1)(x);                 // g(x, 9, x)    
bind(g, _3, _3, _3)(x, y, z);          // g(z, z, z)    
bind(g, _1, _1, _1)(x, y, z);          // g(x, x, x)
注意下面关于最后一个示例的boostguide语句很有趣

请注意,在上一个示例中,bind(g,_1,_1,_1,_1)生成的函数对象不包含对第一个参数以外的任何参数的引用,但它仍然可以与多个参数一起使用。任何额外的参数都会被默默忽略,就像第三个示例中忽略第一个和第二个参数一样

我认为现在很清楚,占位符使这种替换更干净、更优雅

在您的特定情况下,这两种用途是等效的

可以只选择性地绑定一些参数。bind(f,_1,5)(x)等同于f(x,5);这里_1是一个占位符参数,表示“替换为第一个输入参数”


占位符的另一个很好的用途是当你有很多参数,你只想绑定其中一个
而您只需要绑定第6个参数!

如果您想立即调用
bind
的结果,那么您首先不需要
bind
。真正的用例是调用
bind
,现在,调用300个函数和5000行之后的结果。