Angenommen, wir haben die folgende Template-KlasseHilfe mit Typ-Traits
template<typename T> class Wrap { /* ... */ };
Wir nichtWrap
ändern können. Es ist wichtig.
Es gibt Klassen, die von Wrap<T>
abgeleitet sind. Zum Beispiel
class NewInt : public Wrap<int> { /* ... */ };
class MyClass : public Wrap<myclass> { /* ... */ };
class Foo : public Wrap<Bar> { /* ... */ };
Wir nicht diese Klassen ändern. Alle oben genannten Klassen sind Drittanbieter. Das sind nicht meine.
Ich brauche die folgenden Kompilierung type_traits
:
template<class T>
struct is_derived_from_Wrap {
static const bool value = /* */;
};
Was brauche ich?
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);
Aber können Sie 'Int' und' MyClass' ändern? : p – kennytm
Nein. Vielen Dank für Ihren Hinweis. –
Wäre nicht eine bessere Benennung für Ihre Typeigenschaften: 'has_Wrap_for_base'? Eigentlich ist MyClass keine Basis von Wrap. –