Ho una funzione di modello e desidero assicurare in fase di compilazione che non sia istanziata su un sottotipo o supertipo di una particolare classe.Come posso creare un'asserzione del tempo di compilazione secondo cui un modello è di tipi specifici?
Come posso causare un errore del compilatore C++ se questo viene violato?
class base {
};
class derived : public base {
};
class lowest : public derived {
};
template <typename T>
bool isCorrect(const T& obj) {
typedef foo<T> D;
foo<T> *def = foo<T>::find();
return (def && def->getAnswer(object));
}
voglio isCorrect
di essere a disposizione per la classe derived
solo, ma non base
o lowest
. Si noti che potrebbero essere presenti molte altre classi inferiori e una stringa di classi di base da escludere, nonché classi derivate alternative accettabili.
Esiste un modo in C++ per limitare il modello a essere applicato solo alle classi derivate specificate in modo esplicito?
possibile duplicato del [Vincoli modelli C++] (http://stackoverflow.com/questions/122316/template-constraints-c) –
In particolare, questo potrebbe essere utile: http://www.boost.org/doc/libs/1_48_0/libs/concept_check/concept_check.htm –
Perché non si limitano a scrivere sovraccarichi? – GManNickG