Нужно ли использовать параметры шаблона для обозначения того же класса внутри определения?
Это необходимо:
template <typename T>
class A{
T*point;
A<T> someFunction(){} //instead of returning just "A", not "A<T>"
}
Будет ли someFunction
неявным образом возвращать A
того же типа, что и определяемый класс? Потому что вне класса вы можете ссылаться только на этот тип как A<float>
или аналогичный, поэтому я предположил, что это необходимо и внутри класса. Я обнаружил, что он компилируется без < > , поэтому это заставило удивиться, если безопасная привычка пропускать скобки.
Ответы
Ответ 1
Это допустимый и безопасный С++, чтобы опустить параметры шаблона внутри определения класса. На самом деле это хорошая практика, так как позже вы можете добавить другие параметры шаблона со значениями по умолчанию. Вы можете забыть изменить A<T>
на A<T,SomeOtherParameter>
и получить странные ошибки времени компиляции. Тогда только возвращение A
будет делать это.
Ответ 2
Вы можете сказать либо A<T>
, либо просто A
, а A
означает то же, что и A<T>
. Это из-за 14.6.1/1:
Подобно обычным (не шаблонным) классам, шаблоны классов имеют имя с введенным классом (раздел 9). Индексированное имя класса [...] эквивалентно имени шаблона, за которым следуют шаблонные параметры шаблона класса, заключенного в <>
.