Написание шаблона функции, который специализирован для класса и его подклассов
Я пытаюсь написать шаблон функции. Одна версия должна использоваться для всех типов, которые не удовлетворяют критериям для другой версии; другая версия должна использоваться, когда аргумент является базовым классом данного класса или самим этим классом.
Я пытался сделать перегрузку дляBase&
, но когда классы являются производными отBase
они используют общий, а не конкретный.
Я также попробовал этот подход SFINAE:
<code>struct Base { }; struct Derived : public Base { }; struct Unrelated { }; template<typename T> void f(const T& a, bool b = true) { cout << "not special" << endl; } template<typename T> void f(const Base& t, bool b = is_base_of<Base, T>::value) { cout << "special" << endl; } Base b; Derived d; Unrelated u; f(b); f(d); f(u); </code>
Но все они печатаются "не особенные". Я не очень хорош в СФИНАЕ и, вероятно, просто делаю это неправильно. Как я могу написать такую функцию?