Supponiamo di avere la seguente classe templateAiuto con caratteri morfologici
template<typename T> class Wrap { /* ... */ };
Noi non possiamo cambiare Wrap
. È importante.
Lasciate che ci siano classi derivate da Wrap<T>
. Ad esempio,
class NewInt : public Wrap<int> { /* ... */ };
class MyClass : public Wrap<myclass> { /* ... */ };
class Foo : public Wrap<Bar> { /* ... */ };
Noi non può cambiare queste classi troppo. Tutte le classi sopra sono di terze parti. Non sono miei.
Ho bisogno del seguente tempo di compilazione type_traits
:
template<class T>
struct is_derived_from_Wrap {
static const bool value = /* */;
};
Di cosa ho bisogno?
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);
Ma puoi cambiare 'Int' e' MyClass'? : p – kennytm
No. Grazie per il tuo suggerimento. –
Non sarebbe una denominazione migliore per i tratti del tuo tipo essere: 'has_Wrap_for_base'? In realtà, MyClass non è una base di Wrap. –