@Mercury13
Программист на «си с крестами» и не только

Лямбды C++: как сделать функцию, которая принимает лямбда-выражение?

Работаю с QAbstractItemModel, и приходится делать примерно такое.
• Проверка 1 не прошла → return QVariant().
• Проверка 2 не прошла → return QVariant().
Все проверки прошли — выводим некую информацию.
Решил это дело переписать на лямбды.

Упростим задачу.
struct Entry {
  float lo, hi;
};

class GetData {
public:
  virtual QVariant get(const Entry& en) const = 0;
};

QVariant GetLo : public GetData {
public:
  QVariant get(const Entry& en) const override { return en.lo; }
  static const GetLo INSTANCE;
}

QVariant entryToVar(const Entry* en, const GetData& getData) {
  if (en == nullptr) return QVariant();
  return getData.get(*en);
}

…
QVariant vLo = entryToVar(pEntry, GetLo::INSTANCE);


Как всё это переписать на лямбды? Какой параметр ставить вместо const GetData& getData?

Если делать шаблонную, при каких условиях шаблонная расшаблонится в одно и то же?
  • Вопрос задан
  • 575 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы