one simple example explains how std::bind
can used follows:
assume have function of 3 arguments: f3(x, y, z). want have function of 2 arguments defined as: f2(x,y) = f3(x,5,y)
. in c++ can std::bind
:
auto f2 = std::bind(f3, _1, 5, _2);
this example clear me: std::bind
takes function first argument , takes n other arguments, n number of arguments of function taken first argument std::bind
.
however, found use of bind:
void foo( int &x ) { ++x; } int main() { int = 0; // binds copy of std::bind( foo, ) (); // <------ line not understand. std::cout << << std::endl; }
it clear foo
has 1 argument , std::bind
set i
. but why use pair of brackets after (foo, i)
? , why not use output of std::bind
? mean, why don't have auto f = std::bind(foo, i)
?
the line
std::bind( foo, ) ();
is equivalent to:
auto bar = std::bind( foo, ); bar();
it creates bound functor, calls (using second pair of parenthesis).
edit: in name of accuracy (and pointed out @roman, @daramarak) 2 not actually equivalent calling function directly: passed value std::bind. code equivalent calling foo
directly i, be:
auto bar = std::bind( foo, std::ref(i) ); bar();
Comments
Post a Comment