Tak, jest (prawie) jest. std::unique_ptr<T[]>
. Podstawowym szablon ma częściową specjalizację w tym przypadku, który zapewnia odpowiedni interfejs (operator []
, żaden operator *
itp)
Alternatywnie, można zawinąć std::vector
w swojej własnej klasy i ograniczać jego interfejs. Można nawet zrobić poprzez wyprowadzenie klasę z std::vector
użyciem dziedziczenia niepubliczne i publikowanie tylko odpowiednich części jego interfejs:
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[];
};
Dlaczego potrzebne? Dlaczego nie możesz użyć wektora lub tablicy? – user463035818
Lubię moje typy, aby były tak dokładne, jak to możliwe. Planuję użyć jakiegoś 'wektora', ale zmieniam jego rozmiar tylko raz, a następnie zmieniam tylko jego wartości. Wolę, gdybym mógł to udokumentować za pomocą systemu typów zamiast komentarza. – tohava
@Cyber - ale nie chcę tego tylko dla niekodowanych typów wartości, chcę go dla wszystkich typów. – tohava