Да, там (в значительной степени) есть. std::unique_ptr<T[]>
. Первичный шаблон имеет частичную специализацию для этого случая, который обеспечивает соответствующий интерфейс (оператор []
, нет оператора *
и т.д.)
В качестве альтернативы, вы можете обернуть std::vector
в собственном классе и ограничить его интерфейс. Можно даже сделать это путем вывода класса из std::vector
с помощью наследования непубличной и публикации только соответствующие части его интерфейса:
template <class T, class A = std::allocator<T>>
struct FixedVector : private std::vector<T, A>
{
using FixedVector::vector::vector;
using FixedVector::vector::operator=;
using FixedVector::vector::get_allocator;
using FixedVector::vector::at;
using FixedVector::vector::front;
using FixedVector::vector::back;
using FixedVector::vector::data;
using FixedVector::vector::begin;
using FixedVector::vector::cbegin
using FixedVector::vector::end;
using FixedVector::vector::cend;
using FixedVector::vector::empty;
using FixedVector::vector::size;
using FixedVector::vector::operator[];
};
Зачем вам это нужно? Почему вы не можете использовать вектор или массив? – user463035818
Мне нравятся мои типы, чтобы быть как можно точнее. Я планирую использовать некоторый «вектор», но устанавливает его размер только один раз, а затем меняет его значения. Я предпочитаю, если бы я мог документировать это через систему типов, а не через комментарий. – tohava
@Cyber - но я не хочу его использовать только для типов noncopyable value, я хочу его для всех типов. – tohava