Я хочу иметь возможность определить
template <class TX>
void f(const TX &x){ ... }
template <class TY>
void f(const TY &x){ ... }
где TX должен быть получен из BaseX, а TY должен быть получен из BaseY (как я могу указать такие вещи?), И я хочу иметь возможность назвать его как
f(DerivedX<T>())
Очень важно, чтобы я мог не указывать параметры шаблона. Возможно ли это, и если да, то как бы я это реализовал? Если это невозможно, могу ли я заставить шаблонную функцию принимать только определенные типы, но при этом неявно создавать ее экземпляр? Я не могу просто сделать так, чтобы перегрузки f принимали базовый класс, потому что мне нужен тип производного класса.