Используя VC ++ 2010, учитывая следующее:
class Base { };
class Derived : public Base { };
template<class T> void foo(T& t); // A
void foo(Base& base); // B
Derived d;
foo(d); // calls A
foo(static_cast<Base&>(d)); // calls B
Я бы хотел, чтобы "B" вызывался выше.Я могу добиться этого с приведением к Base
, но зачем это нужно?
Я хочу, чтобы функция шаблона вызывалась для всех типов, не производных от Base
(встроенные типы и т. Д.), но я хочу, чтобы не шаблонная перегрузка вызывалась для типов, производных от Base
, без необходимости явного приведения клиента.Я также попытался сделать перегрузку специализацией шаблона, но в этом случае происходит то же самое.Какой идиоматический способ получить то, что я ищу?