Рассмотрим функцию, которая принимает один или несколько параметров (например, имена файлов). Чтобы сделать его универсальным, выгодно написать его для общего диапазона итераторов:
template<class Iter>
void function(Iter first, Iter last)
{
// do something
}
Теперь мы можем вызвать его следующим образом, независимо от того, как мы храним аргументы:
WhateverContainer container;
function(std::begin(container), std::end(container));
Например, STL в значительной степени полагается на эту парадигму.
Теперь представьте, что мы хотим вызвать функцию с единственным аргументом, который не хранится в контейнере. Конечно, мы можем написать:
const int value = 5;
std::vector<int> vec(1, value);
function(std::begin(vec), std::end(vec));
Но это решение кажется неуклюжим и расточительным для меня.
Вопрос: Существует ли более эффективный способ создания совместимого с итератором представления единственной переменной?