Как назвать контейнер, который вычисляет значения элементов на лету?
У меня есть примерно такой код.
// Функциональный объект, для простоты вопроса его смысл
// просто посчитать значение определенным образом.
struct my_functor{
int operator()(int x) const {
return (x * x + 17) / 2 + 1;
}
};
template<class Functor, size_t Size>
struct my_container{
public:
decltype(auto) operator[](int n) const {
return std::visit(_functor, n);
}
// Также реализованы функции begin, end.
private:
Functor _functor;
};
int main(){
my_container<my_functor, 10> cont;
// Использование operator[].
std::cout << cont[1] << std::endl;
// Использование функций begin, end контейнера.
for(int value: cont){
std::cout << value << ", ";
}
}
Если коротко, то реализован контейнер, который вычисляет значение элемента этого контейнера через специальный функциональный объект (так называемый функтор). То есть в контейнере хранится только размер и функция, через которую вычисляется значение элемента.
И весь вопрос в том, как назвать такой контейнер? Наверное, я не первый, кто до этого додумался, и у такого контейнера (или паттерна) есть какое-нибудь красивое название.
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Может "range"? В C++20 так называют и контейнеры, и классы, которые притворяются контейнерами, как ваш.