古いコードの一部を、より単純なファンクター ベースのコードに置き換えたいと考えています。しかし、手元にC++ 11がないため、これにファンクタークラスを導入してboost::lambda/phoenixを使用したくありません。
古いコードは次のようになります
int player = ...;
Point middlePt = ...;
for(Point pt=<magic with nested loops>)
if(this->IsMilitaryBuilding(pt) && (this->GetNode(pt).owner == player + 1))
return true;
return false;
すべてのポイント (魔法をカプセル化) に対して Functor を呼び出し、それらの呼び出しのいずれかが true を返すときに true を返す関数があります。
template<class Functor>
bool CheckPts(Point middlePt, Functor f);
これを の最初の部分に翻訳するのif
は簡単です:
return CheckPts(middlePt, bind(&IsMilitaryBuilding, this, _1));
そして 2 つ目は、次のようなことをしたいと思います:bind(&GetNode, this, _1).owner == player+1
これはサポートされていません。
これを行う最も読みやすい方法は何ですか? これは、フェニックスラムダを使用して参照をバインドし、関数を直接呼び出すことで解決できると思いますがthis
、単純なメンバーまたはパラメーターのみにアクセスする単純な「Hello World」ラムダを超える参照は見つかりませんでした。