template <typename T>
void func(){
T* t = new T();
t->do_something();
...
}
В этом случае, как компилятор знает, что имя типа T будет иметь определенный на нем метод do_something()
? В Java мы можем указать, какой интерфейс расширяет общий класс, но C++, по-видимому, не имеет того же синтаксиса. Итак, что получится, если мы позвоним func<AClassThatDoesntHaveDoSomethingDefined>()
?Как C++ знает, какие методы поддерживает класс шаблонов при компиляции?
Возможные дубликаты: http://stackoverflow.com/q/122316/365102, http://stackoverflow.com/a/15671344/365102 –
@MateenUlhaq Нет. Я не спрашиваю, как добавить ограничения на шаблоны. Мне более любопытно, почему C++ позволяет компилировать такой код и как он обрабатывает случай, когда вызываемая функция не определена. – OneZero
@OneZero Правилами языка являются то, что до момента создания шаблона выполняется очень мало проверок. Как только шаблон создается, хотя - есть достаточно информации, чтобы знать, что есть проблема, нет? –