Supongamos que tenemos la siguiente clase de plantillaAyuda con características de tipo
template<typename T> class Wrap { /* ... */ };
Nos no podemos cambiarWrap
. Es importante.
Deje que haya clases derivadas de Wrap<T>
. Por ejemplo,
class NewInt : public Wrap<int> { /* ... */ };
class MyClass : public Wrap<myclass> { /* ... */ };
class Foo : public Wrap<Bar> { /* ... */ };
Nos no puede cambiar estas clases también. Todas las clases anteriores son de terceros. Ellos no son míos
necesito el siguiente tiempo de compilación type_traits
:
template<class T>
struct is_derived_from_Wrap {
static const bool value = /* */;
};
¿Qué necesito?
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);
¿Pero pueden cambiar 'Int' y' MyClass'? : p – kennytm
No. Gracias por su pista. –
¿No sería mejor denominar para los rasgos de su tipo: 'has_Wrap_for_base'? En realidad, MyClass no es una base de Wrap. –