Tengo una función de plantilla y deseo asegurarme en tiempo de compilación de que no está instanciado en un subtipo o supertipo de una clase en particular.¿Cómo puedo crear una afirmación en tiempo de compilación de que una plantilla es de tipos específicos?
¿Cómo puedo causar un error del compilador de C++ si se infringe esto?
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));
}
Quiero isCorrect
a ser sólo está disponible para la clase derived
, pero no base
o lowest
. Tenga en cuenta que podría haber muchas otras clases más bajas y una cadena de clases base para excluir, así como clases alternativas derivadas que son aceptables.
¿Existe alguna manera en C++ de limitar la plantilla para que solo se aplique a las clases derivadas que especifico explícitamente?
posible duplicado de [Restricciones Plantilla C++] (http://stackoverflow.com/questions/122316/template-constraints-c) –
Específicamente, esto podría ser útil: http://www.boost.org/doc/libs/1_48_0/libs/concept_check/concept_check.htm –
¿Por qué no escribes sobrecargas? – GManNickG