Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it necessary to use template parameters to refer to same class inside definition?

Tags:

c++

Is this necessary:

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

Will someFunction implicitly return the A of the same type as the class being defined? Because outside the class, you can only refer to this type as A<float> or similar, so I'd assumed this was necessary inside the class as well. I discovered it compiles without the <> so this made wonder if it is a safe habit to omit the brackets.

like image 278
johnbakers Avatar asked Jun 05 '13 11:06

johnbakers


2 Answers

It's valid and safe C++ to omit the template parameters inside the class definition. In fact it's good practice, since you might add other template parameters with default values later on. You might forget to change A<T> to A<T,SomeOtherParameter> and get strange compile-time errors. Then just returning A will do it.

like image 166
Ralph Tandetzky Avatar answered Nov 28 '22 04:11

Ralph Tandetzky


You can say either A<T> or just A, and A means the same as A<T>. This is because of 14.6.1/1:

Like normal (non-template) classes, class templates have an injected-class-name (Clause 9). The injected-class-name [...] is equivalent to the template-name followed by the template-parameters of the class template enclosed in <>.

like image 35
Kerrek SB Avatar answered Nov 28 '22 03:11

Kerrek SB