2013-05-28 2 views
2

Для жизни я не могу заставить этот код работать. Я пытаюсь преобразовать свой код из C# в C++ после устаревания инфраструктуры XNA, но упрямый метод не хочет преобразовываться. В C# это:C++ std :: find lambda expressions

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

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

    } 

} 

На присваивания строк 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 

Есть ли способ, чтобы исправить эту ошибку, или лучше/более практичный способ для реализации методы в C++?

+5

Попробуйте 'std :: find_if'. – chris

+0

Ты мой герой. – Oracular

ответ

13

В C++ версии, принимающие компаратор, иногда имеют суффикс _if. Это относится к std::find. std::find берет элемент для поиска, тогда как std::find_if берет компаратор, реализующий равенство. Ошибка просто означает, что она не может найти соответствие для Tile, эквивалентного лямбда.

Смежные вопросы