Tôi có một lớp học như thế này:
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
// more stuff
};
Thông thường tôi muốn mặc định (không) khởi tạo counts
mảng như được hiển thị.
Tuy nhiên, tại các vị trí đã chọn được xác định bằng cách định hình, tôi muốn loại bỏ việc khởi tạo mảng, vì tôi biết mảng sắp bị ghi đè, nhưng trình biên dịch không đủ thông minh để tìm ra nó.
Một cách thành ngữ và hiệu quả để tạo ra một hàm tạo zero-arg "thứ cấp" như vậy là gì?
Hiện tại, tôi đang sử dụng một lớp thẻ uninit_tag
được truyền dưới dạng đối số giả, như vậy:
struct uninit_tag{};
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
event_counts(uninit_tag) {}
// more stuff
};
Sau đó, tôi gọi hàm tạo không có init như event_counts c(uninit_tag{});
khi tôi muốn ngăn chặn việc xây dựng.
Tôi mở cho các giải pháp không liên quan đến việc tạo ra một lớp giả, hoặc hiệu quả hơn theo một cách nào đó, v.v.