Pisanie szablonu funkcji, który specjalizuje się w klasie i jej podklasach
Próbuję napisać szablon funkcji. Jedna wersja powinna być używana dla wszystkich typów, które nie spełniają kryteriów dla innej wersji; druga wersja powinna być używana, gdy argument jest klasą bazową danej klasy lub samej klasy.
Próbowałem przeciążyćBase&
, ale kiedy klasy pochodząBase
, używają ogólnego, a nie konkretnego.
Próbowałem również tego podejścia 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>
Ale wszystkie drukują „nie specjalne”. Nie jestem dobry w SFINAE i prawdopodobnie robię to źle. Jak mogę napisać taką funkcję?