Ora*_*lar 2 c++ lambda expression find c++11
对于我的生活,我无法使用此代码.我试图在XNA框架的弃用之后将我的代码从C#转换为C++,但是一个顽固的方法不希望被转换.在C#中它是:
public Tile GetTileAtPosition(bool screenOrGame, Vector2 position)
{
if (screenOrGame)
{
return Array.Find(tileList, tile => tile.Position == position / 24);
}
else
{
return Array.Find(tileList, tile => tile.Position == position);
}
}
Run Code Online (Sandbox Code Playgroud)
在C++中,我试图用来代替这个的代码是:
Tile Level::GetTileAtPosition(bool screenOrGame, sf::Vector2f position)
{
vector<Tile>::iterator it;
if (screenOrGame)
{
it = find(tileList.begin(), tileList.end(), [position](const Tile &t) { return t.GetPosition() == sf::Vector2f(position.x / 24, position.y / 24); });
return Tile(it->GetID(), it->GetPosition().x, it->GetPosition().y);
}
else
{
it = find(tileList.begin(), tileList.end(), [position](const Tile& t) { return t.GetPosition() == position; });
return Tile(it->GetID(), it->GetPosition().x, it->GetPosition().y);
}
}
Run Code Online (Sandbox Code Playgroud)
在C++分配行(它= ...)我得到一个艰难的错误,我无法弄清楚原因,或解决方案.它返回:
error C2679: binary '==' : no operator found which takes a right-hand operand of type 'const Blobby::Level::GetTileAtPosition::<lambda_29eb981cd341d9c05d39c4654bc470b9>' (or there is no acceptable conversion) c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility 3186
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个错误,或者更好/更实用的方法在C++中实现该方法?
chr*_*ris 14
在C++中,带有比较器的版本有时会带有后缀_if.情况就是如此std::find.std::find需要一个元素来查找,而std::find_if需要一个实现相等的比较器.该错误只是意味着找不到与Tilelambda等效的匹配项.