Nếu lớp cơ sở của tôi có chức năng func(int)
và lớp dẫn xuất của tôi có hàm func(double)
, nguồn gốc func(double)
ẩn base::func(int)
. Tôi có thể sử dụng using
để mang lại phiên bản gốc vào danh sách của Rút ra quá tải:Tôi cần một cái gì đó như "using Base :: *;"
struct base
{
void func(int);
};
struct derived : base
{
using base::func;
void func(double);
}
OK, tuyệt vời. Nhưng nếu tôi không chắc chắn liệu base
có một số func()
hay không? tức là bởi vì tôi đang làm mẫu lập trình meta, tôi không thực sự chắc chắn những gì base
là, nhưng tôi muốn mang lại chức năng của nó lên đến cùng cấp - nếu chúng tồn tại. ví dụ: thay đổi ví dụ trên thành:
struct base_with
{
void func(int);
};
struct base_without
{
};
template <typename Base>
struct derived : Base
{
using Base::func; // if Base has a func(), I want to bring it in
void func(double);
}
derived<base_with> testwith; // compiles
derived<base_without> testwithout; // fails :-(
Tôi cần using_if
như boost::enable_if
. Có vẻ như không thể ...
Xin cảm ơn trước.
Bạn muốn làm gì cuối cùng? 'Có nguồn gốc' được sử dụng cho là gì? –
Tôi đang xây dựng các lớp học tùy chọn triển khai một số tính năng, tùy thuộc vào cách thức/nơi chúng được sử dụng. Về cơ bản chỉ là tái cấu trúc, ở một mức độ nào đó - tức là thay vì viết lớp XWithFeatureA, XWithFeatureB, XWithFeatureAandB, ... chuyển thành nhiều lớp soạn sẵn, tôi muốn có X trong đó feature_traits quyết định các tính năng nào được sử dụng. –
tony
Các tính năng là những thứ như 'cho phép người nghe', 'có những người định cư tùy chỉnh', v.v. đối với một đối tượng trong một hệ thống. Tôi không nghĩ rằng tôi có thể (hoặc được phép) mô tả nó đủ đến mức mà bạn sẽ được thuyết phục rằng một hệ thống với các tính năng tùy chọn thực sự có ý nghĩa. – tony