C++ の bind 関数は強力 ― 2021年04月16日 18時45分43秒
元々、bind には「拘束」や「束縛」と言った意味がある。プログラムで、何を拘束、束縛するかと言うと、変数と関数をくっつけてしまうのだ。近い使い勝手の物として、関数のデフォルト引数がそれに当たる。関数を作って、処理を抽象化する。変更する頻度の低い引数に初期値を与え、未指定時の値にする。
例えば、根を求める root 関数は根数を与えないと平方根になる。
double root( double value, double base = 2.0 );
初期値の欠点は、後ろからしか値を設定できないこと。任意の値を自由に渡すことは出来なくなる。例えば、各種三乗根の値を求めたりは出来ないのだ。bind を使うと任意の変数を事前に与えることが出来る。コールバック関数等とも相性が良い。
三乗根ではなく、簡素化した物だが、三倍を求める特別な関数を構築して使い回せる。
#include <functional>
#include <iostream>
void print_multiply( double d, int factor )
{
std::cout << d * factor << std::endl;
}
int main()
{
std::function< void( double ) > multi3 =
std::bind( &print_multiply, std::placeholders::_1, 3 );
multi3( 4.5 );
}
% c++ bind.cpp
% ./a.out
13.5
次回。
最近のコメント