読者です 読者をやめる 読者になる 読者になる

Folioscope

プログラミング/Unix系/デザイン/CG などのメモがもりもり

C++でRubyのdoブロックっぽいこと

多くのケースの場合、メソッドに渡すクロージャは一つなので、Rubyのdoブロックのようにクロージャを書くための文法があるのは理にかなっている。 C++でも同じことはできないかなーと思って、少し書いてみた。

C++の文法自体を変えることはできないけど、目を細めて見たら"λ = "に見えなくもない/=演算子をオーバーロドして、std::function<T>をパスできるArrayクラスを作ってみました。

使い方

Array<char> array {'a', 'b', 'c', 'd', 'e'};

array.each /= [](char x){ 
  std::cout << x << std::endl;
};  

array.keep_if /= [](char x){
  return x <= 'c';
};  

array.each /= [](char x, int i){ 
  std::cout << i << ":" << x << std::endl;
};  

おしりの;はどうすることもできなかった。残念。

全体のソースコードはこちら

実行結果