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