Search code examples
c++typedef

When should I use typedef in C++?


In my years of C++ (MFC) programming in I never felt the need to use typedef, so I don't really know what is it used for. Where should I use it? Are there any real situations where the use of typedef is preferred? Or is this really more a C-specific keyword?


Solution

  • Template Metaprogramming

    typedef is necessary for many template metaprogramming tasks -- whenever a class is treated as a "compile-time type function", a typedef is used as a "compile-time type value" to obtain the resulting type. E.g. consider a simple metafunction for converting a pointer type to its base type:

    template<typename T>
    struct strip_pointer_from;
    
    template<typename T>
    struct strip_pointer_from<T*> {   // Partial specialisation for pointer types
        typedef T type;
    };
    

    Example: the type expression strip_pointer_from<double*>::type evaluates to double. Note that template metaprogramming is not commonly used outside of library development.

    Simplifying Function Pointer Types

    typedef is helpful for giving a short, sharp alias to complicated function pointer types:

    typedef int (*my_callback_function_type)(int, double, std::string);
    
    void RegisterCallback(my_callback_function_type fn) {
        ...
    }