Как использовать проекцию для вложенного поля класса?
В новой версии c++ добавилась возможность использовать projection в функциях файла algorithm.
Например, для следующего класса
struct Int {
constexpr Int() = default;
constexpr Int(int value) : value(value) {
}
int value = 0;
};
Можно вызвать сортировку вот так
Int ints[10];
ranges::sort(ints, {}, &Int::value);
Но я не понимаю, как быть со структурами, которые имеют вложенные поля.
struct prop {
int val = 0;
};
struct Int2 {
constexpr Int2() = default;
constexpr Int2(int value) {
property.val = value;
}
using property_type = prop;
prop property;
};
Int2 ints2[10];
ranges::sort(ints2, {}, &Int2::property::val); // Ошибка
Ответы (1 шт):
Автор решения: user490295
→ Ссылка
#include <algorithm>
struct prop {
int val = 0;
};
struct Int2 {
constexpr Int2() = default;
constexpr Int2(int value) {
property.val = value;
}
using property_type = prop;
prop property;
};
int main() {
Int2 ints2[10];
std::ranges::sort(ints2, {}, [](auto i) { return i.property.val; });
}