2015-03-05 22 views
7

"Dinamik olarak boyutlandırılamayan yeniden boyutlandırılabilir dizi" gibi davranan bir C++ türü var mı? tip Bu tip iki şeyden biri olarak düşünülebilir: Dinamik olarak boyutlandırılamayan yeniden boyutlandırılabilir dizi

  • vector<T> ama resize, push_back olmadan

    vb
  • array<T,N> ama N dinamik ve statik olmadığı durumlarda.

Yalnızca dizideki öğelerin türü kopyalanamaz bir türse işe yarayan bir çözüm istemiyorum. Genel bir çözüm istiyorum.

+0

? Neden bir vektör veya dizi kullanamazsınız? – user463035818

+1

Türlerimin olabildiğince doğru olmasını seviyorum. Bazı 'vektör' kullanmayı planlıyorum ama boyutunu sadece bir kez ayarlıyor ve sadece değerlerini değiştiriyorum. Bunu bir yorum yoluyla değil, tip sistemiyle belgeleyebilir miyim? – tohava

+0

@Cyber ​​- ama sadece koparmasız değer türleri için istemiyorum, her tür için istiyorum. – tohava

cevap

22

Evet, orada (hemen hemen) var. std::unique_ptr<T[]>. Birincil şablon

Alternatif olarak, kendi sınıfında std::vector sarın ve arayüz kısıtlayabilir uygun arayüz sağlar, bu durumda, için kısmi ihtisas Operatörü ([], hiçbir operatör * vs.) vardır. Hatta yapabileceği kamuya açık olmayan miras ve yayıncılık onun arayüzünün sadece ilgili kısımları kullanılarak std::vector bir sınıf türetmek tarafından: Bu ihtiyacın var Neden

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[]; 
}; 
+2

Yanılıyorsam düzeltin, ancak bunun bir const olması gerekir çünkü aksi halde birisi işaretçiyi değiştirebilir. Sağ? Bir 'const ', bir kerelik yeniden boyutlandırılabilir vektör ve başka hiçbir şey olarak işlev yapmasına izin verir. – tohava

+0

Kullanarak çok güzel hile – tohava

+0

bir const gibi görünüyor std :: vector <> 'açık çözümdür – Arvid

İlgili konular