C++ 20: попытка вернуть std::ranges::view из функцииC++

Программы на C++. Форум разработчиков
Anonymous
 C++ 20: попытка вернуть std::ranges::view из функции

Сообщение Anonymous »

Мне поручено изучить вопрос повышения производительности некоторого устаревшего кода C++ с помощью CPP20. Одна из потенциальных областей улучшения, которую я вижу, — это этот шаблон на горячем пути.

Код: Выделить всё

std::vector getEngagementsForDay(DayIndex day) {
std::vector outputVector;
for(EngagementIndex engagement : engagements){
if(getDay(engagement) == day) {
outputVector.pushback(engagement);
}
}
return outputVector;
}
Это небольшие векторы (обычно менее 10 значений), а хранимый в них индекс является коротким (не хранит весь объект >). Тем не менее, эта функция вызывается несколько сотен тысяч раз, и я подозреваю, что отказ от выделения векторной памяти должен помочь.
Вместо этого я хочу заменить возвращаемый тип представлением.
Вопрос № 1. Каков тип возвращаемого значения для соответствующего представления?
Похоже, что во всех примерах и обсуждениях используется auto. В моем крошечном магазине auto не рекомендуется, но если это действительно лучший вариант, мы, вероятно, сможем с этим смириться.
Но более серьезная проблема заключается в том, что я даже не могу заставить свой код скомпилироваться. с auto.
В основном, в зависимости от некоторых условий выполнения, мне нужно иметь возможность возвращать из функции 4 «вида» представлений.
< strong>Пустое представление

Код: Выделить всё

return std::ranges::empty_view();
Целый вектор

Код: Выделить всё

return engagements | std::views::all;
Часть вектора

Код: Выделить всё

return engagements | std::views::take(size);
Вектор фильтруется по некоторому условию

Код: Выделить всё

return engagements | std::views::filter(engagementDayFilter(day));
Каждый из моих операторов возврата создает разные типы, что не позволяет мне поместить их в одну и ту же функцию.
Каковы мои варианты?
У меня нет опыта работы с CPP20, но Google не слишком помог.

Подробнее здесь: https://stackoverflow.com/questions/790 ... a-function

Вернуться в «C++»