Предположим, у меня есть интерфейс, который возвращает диапазон значений.Реализация этого интерфейса может использовать разные контейнеры для предоставления этих чисел.
class MyClassI
{
public:
virtual std::pair<std::vector<int>::iterator, std::vector<int>::iterator> Numbers() const = 0;
}
class MyClassC : public MyClassI
{
public:
virtual std::pair<std::vector<int>::iterator, std::vector<int>::iterator> Numbers() const
{ return std::make_pair(numbers.begin(), numbers.end(); }
private:
std::vector<int> numbers;
}
Интересно, есть ли способ "затухания" типа контейнера от итератора.
class MyClassI
{
public:
virtual std::pair<decayed_iterator<int>, decayed_iterator<int>> Numbers() const = 0;
}
Конечно, я могу поместить оригинальный итератор в кучу, и я могу обернуть этот указатель классом шаблона, чтобы обеспечить тип значения в качестве итератора.
Интересно, уже есть что-то подобное в boost иличто-то вне себя.
Я могу представить себе что-то вроде функции std / boost, где вызываемый объект исчезает (если это функция или структура), а часть "state" хранится внутри объекта.если он достаточно мал, чтобы избежать выделения кучи - если возможно.