I've been watching this CppCon talk where the speaker was talking about writing classes resistant to future changes. He provided the following code as an example (that I show here abridged):
template< typename Type, size_t Cap >
class FixedVector final
{
using iterator = Type*;
iterator begin();
}
My question is, basically the following - Does he use type aliasing here only because the type itself is already provided by the user of the class (and is a priory know to them)? I mean, if that was not the case, then there is not way the user can use the aliased return type, right?
The point they are trying to make is if they had
template< typename Type, size_t Cap >
class FixedVector final
{
Type* begin();
}
and later they decide that instead of a Type*
, they want to use a my_custom_iterator<Type>
, then they need to make that change to all places that use Type*
. By using
class FixedVector final
{
using iterator = Type*;
iterator begin();
}
if you want to make that same change it is as simple as changing
using iterator = Type*;
to be
using iterator = my_custom_iterator<Type>;