我想用更简单的基于仿函数的代码替换一些旧代码。但是我不想为此引入一个仿函数类并为此使用 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 的引用,它只访问一个简单的成员或参数。