0

古いコードの一部を、より単純なファンクター ベースのコードに置き換えたいと考えています。しかし、手元に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」ラムダを超える参照は見つかりませんでした。

4

0 に答える 0