在boost lambda / phoenix中访问返回结构的成员

时间:2016-05-28 11:31:12

标签: c++ boost boost-phoenix boost-lambda

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

0 个答案:

没有答案