假设我们有以下模板类
template<typename T> class Wrap { /* ... */ };
我们不能改变 Wrap
。这很重要。
假设有派生自 的类Wrap<T>
。例如,
class NewInt : public Wrap<int> { /* ... */ };
class MyClass : public Wrap<myclass> { /* ... */ };
class Foo : public Wrap<Bar> { /* ... */ };
我们也不能改变这些类。以上所有课程都是第 3 方。他们不是我的。
我需要以下编译时间type_traits
:
template<class T>
struct is_derived_from_Wrap {
static const bool value = /* */;
};
我需要什么?
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);