std::array + std::vector = std::buffer
От: c-smile Канада http://terrainformatica.com
Дата: 14.08.13 06:04
Оценка:
Есть ли в 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]; }
  };
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.