Ben böyle bir sınıf var:
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
// more stuff
};
Genellikle varsayılan (sıfır) counts
gösterildiği gibi dizi başlatmak istiyorum .
Profilleme ile belirlenen seçilen yerlerde, ancak, dizi üzerine yazmak üzere olduğunu biliyorum, ancak derleyici bunu anlamaya yetecek kadar akıllı değil, çünkü dizi başlatma bastırmak istiyorum.
Böyle bir "ikincil" sıfır arg yapıcısı oluşturmanın deyimsel ve etkili yolu nedir?
Şu anda, uninit_tag
kukla bir argüman olarak geçirilen bir tag sınıfı kullanıyorum, şöyle :
struct uninit_tag{};
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
event_counts(uninit_tag) {}
// more stuff
};
Daha sonra inşaatı event_counts c(uninit_tag{});
bastırmak istediğimde no-init yapıcısını çağırıyorum .
Sahte bir sınıfın oluşturulmasını içermeyen veya bir şekilde daha verimli olan çözümlere açıkım.