Giả sử chúng ta có lớp mẫu sauTrợ giúp với loại đặc điểm mà
template<typename T> class Wrap { /* ... */ };
Chúng tôi không thể thay đổiWrap
. Nó quan trọng.
Cho phép có các lớp học bắt nguồn từ Wrap<T>
. Ví dụ,
class NewInt : public Wrap<int> { /* ... */ };
class MyClass : public Wrap<myclass> { /* ... */ };
class Foo : public Wrap<Bar> { /* ... */ };
Chúng tôi không thể thay đổi các lớp này quá. Tất cả các lớp trên là bên thứ 3. Chung không thuộc vê tôi.
Tôi cần thời gian biên dịch sau type_traits
:
template<class T>
struct is_derived_from_Wrap {
static const bool value = /* */;
};
Tôi cần những gì?
assert(is_derived_from_Wrap<Int>::value == true); // Indeed I need static assert
assert(is_derived_from_Wrap<MyClass>::value == true);
assert(is_derived_from_Wrap<char>::value == false);
struct X {};
assert(is_derived_from_Wrap<X>::value == false);
Nhưng bạn có thể thay đổi 'Int' và' MyClass' không? : p – kennytm
No. Cảm ơn bạn đã gợi ý. –
Chẳng phải việc đặt tên tốt hơn cho các đặc điểm kiểu của bạn là: 'has_Wrap_for_base'? Trên thực tế, MyClass không phải là một cơ sở của Wrap. –