Tôi đang cố ngăn một lớp không thể chuyển đổi con trỏ 'this' thành con trỏ của một trong các giao diện của nó. Tôi làm điều này bằng cách sử dụng thừa kế riêng thông qua một lớp proxy trung gian. Vấn đề là tôi tìm thấy sự thừa kế riêng làm cho tất cả các thành viên tĩnh công cộng và các kiểu của lớp cơ sở không thể tiếp cận được với tất cả các lớp trong lớp kế thừa trong hệ thống phân cấp.C++ private inheritance và static members/types
class Base
{
public:
enum Enum
{
value
};
};
class Middle : private Base
{
};
class Child : public Middle
{
public:
void Method()
{
Base::Enum e = Base::value; // doesn't compile BAD!
Base* base = this; // doesn't compile GOOD!
}
};
Tôi đã thử điều này trong cả hai phiên bản VS2008 (phiên bản bắt buộc) và VS2010, không hoạt động.
Có ai nghĩ đến giải pháp thay thế không? Hoặc một cách tiếp cận khác để dừng chuyển đổi?
Ngoài ra tôi là curios của hành vi, nó chỉ là một tác dụng phụ của việc thực hiện trình biên dịch, hoặc là nó bằng cách thiết kế? Nếu theo thiết kế thì tại sao? Tôi luôn luôn suy nghĩ về sự thừa kế riêng tư có nghĩa là không ai biết được kế thừa của Middle từ Base. Tuy nhiên, hành vi trưng bày ngụ ý sự thừa kế riêng có nghĩa là nhiều hơn thế, trên thực tế, Child có ít quyền truy cập vào Base hơn bất kỳ vùng tên nào không có trong hệ thống phân cấp lớp!
+1: Thật là một câu hỏi rất thú vị. –