У меня есть шаблонная функция, и я хочу во время компиляции убедиться, что она не реализована для подтипа или супертипа определенного класса.
Как я могу вызвать ошибку компилятора C ++, если она нарушена?
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));
}
Я хочу, чтобы isCorrect
был доступен только для класса derived
, но не base
или lowest
. Обратите внимание, что может быть много других низших классов и ряд базовых классов, которые будут исключены, а также альтернативные производные классы, которые являются приемлемыми.
Есть ли в C ++ способ ограничить использование шаблона только теми производными классами, которые я явно указал?