Trong một lớp B
kế thừa từ lớp A
, có thể sử dụng một using
khai báo để đưa các thành viên A
vào B
, thậm chí các mẫu, như thế này:
struct A {
template <typename T>
void foo();
};
struct B : private A {
using A::foo;
};
Nhưng nó có thể được thực hiện cho các mẫu chuyển đổi?
struct A {
template <typename T>
operator T();
};
struct B : private A {
using A::operator /* ??? */;
};
Dường như không có cách nào để đề cập đến mẫu theo tên, nhưng tôi rất muốn được chứng minh là sai hoặc nhận được một số làm rõ.
1
Trường hợp sử dụng là gì?
—
R Sahu
@RSahu Có lẽ để kế thừa một hàm tạo chuyển đổi mà không yêu cầu thừa kế công khai.
—
Ayjay
@Ayjay, nếu đó là trường hợp, thì việc sử dụng
—
R Sahu
private
quyền thừa kế là không hợp lý, IMO.
@RSahu Ayjay là chính xác. Để cụ thể hơn, tôi muốn cho phép một số lớp
—
Táo
C
kế thừa B
, nhưng C
không nên có quyền truy cập vào A
các phương thức được bảo vệ. Tuy nhiên, tôi muốn A
các phương thức công khai vẫn được công khai, bao gồm cả toán tử chuyển đổi này. Tôi biết tôi có thể giải quyết vấn đề này theo một số cách, nhưng tôi muốn tránh viết thêm mã cho lợi ích nhỏ như vậy.
@Apples, có vẻ như lỗ hổng thiết kế. Tôi không biết bạn có bao nhiêu quyền kiểm soát đối với các lớp này. Nếu bạn có quyền kiểm soát những gì đi vào
—
R Sahu
A
, bạn có thể tách A
thành hai lớp - một lớp B
có thể kế thừa public
ly và lớp kia private
.