Sì, c'è (praticamente) lo è. std::unique_ptr<T[]>
. Il modello primario ha una specializzazione parziale per questo caso, che fornisce l'interfaccia appropriata (operatore []
, nessun operatore *
ecc)
In alternativa, si può avvolgere std::vector
nella propria classe e limitare la sua interfaccia. Si potrebbe anche fare questo derivando una classe da std::vector
utilizzando l'ereditarietà non pubblica e la pubblicazione solo le parti rilevanti della sua interfaccia:
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[];
};
Perché avete bisogno di questo? Perché non puoi usare un vettore o un array? – user463035818
Mi piace che i miei tipi siano il più precisi possibile. Ho in programma di usare alcuni 'vector', ma le impostazioni della sua dimensione solo una volta e quindi solo cambiando i suoi valori. Preferisco poter documentare questo tramite il sistema di tipi anziché tramite un commento. – tohava
@Cyber - ma non lo voglio solo per tipi di valori non calcolabili, lo voglio per tutti i tipi. – tohava