Способ сделать это - заменить распределитель. Обратите внимание, что vector и string - единственные контейнеры, которые на самом деле проверяют свои распределители max_size прямо сейчас. Идея состоит в том, что, поскольку эти контейнеры гарантируют, что элементы хранятся в непрерывной памяти, контейнер спрашивает распределитель, сколько элементов может обработать распределитель.
Это идея
template<class T>
struct MyAllocator:std::allocator<T>
{
template <class U>
struct rebind { typedef MyAllocator<U> other; };
typedef typename std::allocator<T>::size_type size_type;
MyAllocator(size_type sz=1234)
: m_maxsize(sz)
{}
size_type max_size() const { return m_maxsize; }
private:
size_type m_maxsize;
};
затем создайте новый вектор
typedef std::vector<Type,MyAllocator<Type>> vec_t;
vec_t vec(vec_t::allocator_type(4567));
Я не пробовал компилировать этот код, но он должен работать.