Использование VС++ 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
, без требуя, чтобы клиент явно бросил. Я также попытался сделать перегруз специализацией шаблона, но в этом случае происходит такое же поведение. Каков идиоматический способ получить то, что я ищу?