Есть ли в std что-то типа этого вот самописного лисапеда?
int n = ...;
buffer<int,256> buf(n);
если n < 256 то buffer stack based, никакого malloc не происходит
иначе — allocated on heap, malloc/free.
Вынлядит это дело как-то так:
template<class T, uint N >
class buffer
{
T data[N];
vector<T> dyn_data;
slice<T> vdata;
public:
buffer(size_t n) {
if(n > N) { dyn_data.length(); vdata = dyn_data(); }
else { vdata.start = data; vdata.length = n; }
}
T* start() const { return const_cast<T*>(vdata.start); }
const T* end() const { return vdata.end(); }
size_t length() const { return vdata.length; }
slice<T> operator()() { return vdata; }
T &operator[](index_t i) { return static_cast<T*>(vdata.start)[i]; }
const T &operator[](index_t i) const { return vdata.start[i]; }
};