2024年05月21日

C++で関数名を渡したい

void function1( int a,double b ){ ... };

これを関数名でほか関数に渡したい場合。
std::function<void(int,double)> F1= std::bind( function1, std:placeholders::_1, std::pleaseholders::_2 );
F1(3,3.14);
みたいな感じで。

funciton1 は前で規定した、変数化?したい関数
std::placeholders::_1  F1の第1引数 → function1 の a に入る
std::placeholders::_2  F1の第2引数 → function1 の b に入る
10個くらいは引数付けられるみたいだ。
※引数の代わりに固定値も可、ただしstd:placeholdersを使うなら_1から順に

クラスの自分の中の関数を指定の場合

class aaa{
void function2( int c ){ ... };
void function3( int d ){
  std::function<void(int)> F2= std::bind( function1, this,  std:placeholders::_1 );
  F2(5);
  };
};

クラスで使うなら、std::bindの第2引数にインスタンスを入れる。自分のインスタンスの関数ならthisとなる。
std::function<>の部分はautoにしとくと記載は楽。だが場所を選ぶかも。

C++11から対応です。


posted by すら at 19:01| プログラミングなこと