• [^] # Re: static / constexpr

    Posté par . En réponse à la dépêche C++17 adapte le static_assert() aux usages. Évalué à 4.

    typedef <=> using

    Pas très synonyme pour moi ça.

    using sert surtout à désambiguïser quelle version d'une fonction ou d'un type utilisé. À part pour les outils de boost qui sont hyper méga pénibles et illisibles sans ça ou un typedef, je ne m'en sers que dans des cas super rares (dont un wrapper une fois pour pouvoir debug du code faisant appel à la STL sans que gdb me dise "machin est optimisé, va donc te faire pendre", je ne savais pas encore pour "-D_GLIBCXX_DEBUG" via clang).

    typedef par contre permets de définir un type comme synonyme d'un autre. Ça peut servir à raccourcir le code, bien sûr, mais aussi à donner un nom sympa à une spécialisation particulière d'un template, ou un type sous-jacent d'un conteneur ou itérateur maison.

    Exemple pour le coup de la spécialisation:

    template <typename TYPE, TYPE INVALID_VAL, void(*DTOR)(TYPE)>
    struct unique_resource
    {
    //je vous passe l'implémentation, je pense le nom parlant et l'idée assez simple?*
    };
    void file_close( int fd )
    {
     close( fd ); //je sais, c'est pas bien d'ignorer la valeur de retour, un jour je ferai une version qui permette une gestion d'erreurs plus clean
    }
    void clean_ogl_texture( GLsizei tex )
    {
     glDeleteTextures( 1, &tex );
    }
    typedef unique_resource<int,-1,file_close> fd_t;
    typedef unique_resource<GLsizei,-1,clean_ogl_texture> gl_tex_t;

    *: mais au pire je peux en mettre, c'est pas un problème.