Tôi cần ngăn không cho lớp bắt nguồn từ vì vậy tôi tự nghĩ, đây là thứ mà Boost chắc chắn đã làm. Tôi biết họ có một noncopyable, họ phải có một nonderivable ...Có cách nào, sử dụng các mẫu, để ngăn không cho lớp học có thể phát sinh trong C++
Hãy tưởng tượng sự ngạc nhiên của tôi khi tôi không thể tìm thấy nó ....
Đó tôi đã suy nghĩ .. Có phải là một lý do. Có thể không thể sử dụng các mẫu ..
Tôi chắc chắn nếu nó dễ dàng, nó nằm trong thư viện tăng cường.
tôi biết làm thế nào để làm điều đó mà không sử dụng các mẫu, tức là sử dụng một lớp cơ sở với một constructor tin tức
class ThatCantBeDerived; // Forward reference
class _NonDeriv
{
_NonDeriv() {}
friend class ThatCantBeDerived;
};
class ThatCantBeDerived : virtual public _NonDeriv
{
public:
ThatCantBeDerived() :
_NonDeriv()
{
}
};
Hoặc một cái gì đó như thế này ..
Có thể đó là tài liệu tham khảo về phía trước gây ra vấn đề , hoặc có thể không có một cách cầm tay để đạt được nó ..
Dù bằng cách nào, tôi không chắc chắn lý do tại sao nó không phải là trong thúc đẩy ..
Bất kỳ ý tưởng?
ScaryA, ra khỏi curiocity nhàn rỗi, có thể bạn vui lòng tiết lộ lý do tại sao một muốn có một lớp học không thể sinh tồn? (Câu hỏi trung thực - Tôi chưa bao giờ có một thiết kế mà có thể đã kêu gọi như vậy, nhưng tôi cho rằng câu hỏi của bạn có một số nguồn thực tế). – DVK
Số nhận dạng bắt đầu bằng dấu gạch dưới theo sau là chữ cái viết hoa (dưới dạng số nhận dạng bắt đầu bằng dấu gạch dưới kép) được dành riêng cho việc triển khai (trình biên dịch + thư viện). Bạn không nên gọi mẫu của bạn '_NonDeriv'. –
@DVK Giả sử bạn đang thiết kế một công cụ đang sử dụng cấu trúc cố định mà lớp ánh xạ trực tiếp (tức là cấu trúc sk_buff) và tất cả thư viện của bạn làm cho việc tối ưu hóa/giả định về ánh xạ đó. Bạn chắc chắn không muốn ai đó có thể thay đổi bạn? – ezpz