Подтвердить что ты не робот

Нужно ли использовать параметры шаблона для обозначения того же класса внутри определения?

Это необходимо:

 template <typename T>
 class A{
   T*point;
   A<T> someFunction(){} //instead of returning just "A", not "A<T>"
 }

Будет ли someFunction неявным образом возвращать A того же типа, что и определяемый класс? Потому что вне класса вы можете ссылаться только на этот тип как A<float> или аналогичный, поэтому я предположил, что это необходимо и внутри класса. Я обнаружил, что он компилируется без < > , поэтому это заставило удивиться, если безопасная привычка пропускать скобки.

4b9b3361

Ответ 1

Это допустимый и безопасный С++, чтобы опустить параметры шаблона внутри определения класса. На самом деле это хорошая практика, так как позже вы можете добавить другие параметры шаблона со значениями по умолчанию. Вы можете забыть изменить A<T> на A<T,SomeOtherParameter> и получить странные ошибки времени компиляции. Тогда только возвращение A будет делать это.

Ответ 2

Вы можете сказать либо A<T>, либо просто A, а A означает то же, что и A<T>. Это из-за 14.6.1/1:

Подобно обычным (не шаблонным) классам, шаблоны классов имеют имя с введенным классом (раздел 9). Индексированное имя класса [...] эквивалентно имени шаблона, за которым следуют шаблонные параметры шаблона класса, заключенного в <>.