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.
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.
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
<>
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With