Я хотел бы сохранить диапазон в виде поля в классе, чтобы впоследствии я мог использовать его несколько раз.Однако, в отличие от локальных переменных, я не могу просто указать его тип как auto
.С другой стороны, типы диапазонов, которые создает библиотека, очень сложны.Мне потребовалось бы непропорционально много времени, чтобы выяснить правильный тип вручную + это было бы невозможно в будущем, если бы я решил изменить способ получения диапазона.
Итак, я подумал, может быть, я мог бы использоватьdecltype
, чтобы помочь себе:
class MyClass {
public:
using MyRange = decltype(std::declval<std::vector<int*>>() | ranges::v3::view::filter([=](int* elem) { return true; }));
MyRange range;
}
(примечание: мой фактический std::declval
на самом деле более сложный, но я хотел бы сделать пример кратким.)
Но я получаю ошибку: a lambda cannot appear in an unevaluated context
Итак, мой вопрос:
- Как мне избежать использования лямбды и заставить работать
decltype
? - Или, может быть, естьлучший / более чистый способ получить тип диапазона, чтобы объявить его как поле в классе?