Извините за этот глупый вопрос, но я совсем новичок в C ++.
У меня есть базовый класс с именем AlertInfoBase
в моем проекте.У него есть несколько десятков подклассов.Теперь я хочу иметь шаблон класса, который будет иметь метод filter()
.Этот метод всегда возвращает ссылку на AlertInfoBase
.Вот код:
template <class T>
class AlertInfoFilter
{
public:
AlertInfoFilter() { }
AlertInfoBase & filter(T & alertInfo)
{
return alertInfo;
}
};
Как видите, фильтр методов просто возвращает переданный параметр.Моя цель - создать альтернативные реализации filter()
, используя специализацию шаблонов, но сейчас это не моя проблема / вопрос.Странная вещь, с которой я сталкиваюсь, заключается в том, что, когда я передаю экземпляр класса в filter()
, который находится в подклассе от AlertInfoBase
, все работает как ожидалось.Он возвращает ту же ссылку, но когда я передаю экземпляр класса, который не реализует AlertInfoBase
, проект не компилируется.На самом деле, я хочу иметь такое поведение, но некоторые пояснения, почему это происходит, было бы неплохо.Достаточно ли умен компилятор, чтобы предположить, что я заполняю метод неверным параметром из-за типа возвращаемого значения?
Спасибо
PS Я использую компилятор MinGW.