Search code examples
c++aliasreturn-typetype-alias

cpp - alias for member functions` return types


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?


Solution

  • 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>;