0

我想用更简单的基于仿函数的代码替换一些旧代码。但是我不想为此引入一个仿函数类并为此使用 boost::lambda/phoenix,因为我手头没有 C++11。

旧代码看起来像这样

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));

而对于第二个,我想做一些类似的事情:bind(&GetNode, this, _1).owner == player+1不支持。

这样做最易读的方法是什么?我认为这可能可以通过绑定一个引用this并直接使用 phoenix lambda 调用函数来解决,但我没有发现任何超出简单的“Hello World”lambdas 的引用,它只访问一个简单的成员或参数。

4

0 回答 0