ı hareketli ne de copyable özellikte olmayan bir tür var diyelim: Artık derleme zamanında (N diyoruz) bilinen bir numara verilirTaşınamaz, kopyalanamaz nesneler dizisi nasıl başlatılır?
struct foo
{
explicit foo(size_t){}
~foo(){}
foo(foo const &) = delete;
foo(foo &&) = delete;
foo& operator=(foo const &) = delete;
foo& operator=(foo &) = delete;
};
, bunlardan bir "dizisini" oluşturabilir herhangi bir yolu yoktur her biri 0 ile N-1 ile sıfırlanan yığın üzerinde? Bir C-stili dizi foo[N]
, bir std::array< foo, N >
veya bir tür bile bir std::tuple
memnun olurum. Ben kaçınmaya çalışıyorum ne
dışarı yazıyor:
foo f0(0), f1(1), ... fNminus1(N-1);
böyle hissediyor derleyici benim için yapmaya muktedir gereken bir şeydir. Gelebildiğim en iyi şey boost::optional
kullanıyor.
Ama hepsi gerekli bilgiler derleme sırasında kullanılabilir olmasına karşın çalışma zamanı mantığına dayanır. Ayrıca, bir dizi işaretçi gibi davranan bir şeyle kaldım.
Korkarım ki bunu reddetmeliyim. Sorun şu ki, eğer 'yapı' bir istisna atarsa, hiçbir zaman inşa edilmemiş bir nesnenin yıkıcısını çağırırsınız. –
@DavidStone Evet, bu bir sorun. Kurucu atmamalı. Bir static_assert ekledim. Benjamin Lindley'in cevabında, kurucu başarısız olduğunda, hiçbir yıkıcı aramaz. – R1tschY
Yükseltme olarak değiştirildi –