パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

関数内関数

C++ では、直接は関数内関数定義は使えないが、関数内クラス宣言を使うと近いものができる。
同じ部分コードを何度も記述しないために、関数内関数は結構使えると思うのだが、いちいち関数内クラス宣言のために、struct Nanka { }; とか書くのがうっとうしいところ。もっとスマートな方法がありそうな気がする。

返り値がないなら、コンストラクタでやってしまってもいいのかも。例外が内部で発生した場合の対応がなんとなく不安なので、個人的にはあまり使わないのだが。

void testFunc() {
  struct util {
    static void func(int a) { cout << a << "\n"; }
  };
  util::func(1);
  util::func(10);
  ...
}

あ、関数オブジェクト使えばいいのか。

void testFunc() {
  struct {
    void operator()(int a) const { cout << a << "\n"; }
  } coutNum;
  coutNum(1);
  coutNum(10);
  ...
}

C++ プログラマなら当たり前のことだったなぁ。