C++ の bind 関数は強力2021年04月16日 18時45分43秒

C++ のタプルは使いづらいが、それとは対象的に bind はとても強力。

元々、bind には「拘束」や「束縛」と言った意味がある。プログラムで、何を拘束、束縛するかと言うと、変数と関数をくっつけてしまうのだ。近い使い勝手の物として、関数のデフォルト引数がそれに当たる。関数を作って、処理を抽象化する。変更する頻度の低い引数に初期値を与え、未指定時の値にする。

double root( double value, double base = 2.0 );
例えば、根を求める root 関数は根数を与えないと平方根になる。

初期値の欠点は、後ろからしか値を設定できないこと。任意の値を自由に渡すことは出来なくなる。例えば、各種三乗根の値を求めたりは出来ないのだ。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

次回

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2021/04/16/9367884/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。