• [^] # Re: Typage structurel

    Posté par (site web personnel) . En réponse au journal C++ Hell/Heaven et les concepts. Évalué à 6.

    J'ai l'impression de devoir faire à la main un truc que le compilo pourrait me faire automatiquement

    Qu'ai-je loupé?

    Pas grand chose à vrai dire.

    En premier lieu, les concepts vont te permettre de forcer "un peu plus" que ce que ta fonction demande vraiment. Par exemple si ta fonction ressemble à:

    template T Foo(T a, T b){
    return a + b;
    }

    Le compilateur sait que tu veux un operator+ sur T, mais c'est tout. Avec un concept tu pourra aussi demander à ce que + soit commutatif.

    En second lieu, le compilateur sait des choses en observant ton code. De la même manière que tu sais des choses en observant un code. Mais il y a une partie ambigu qu'un lecteur (humain ou compilateur) ne pourra pas décider sans aide. Si j'appelle Foo en lui passant pour T une table qui ne possède pas d'opérateur +.

    Est-ce le code de Foo qui est faux ? Est-ce que type T devrait avoir un opérateur + ou est-ce que c'est mon appel qui est faux et je voulais en fait additionner le prix des tables ? Pour chacun c'est une erreur différente avec une position différente.

    En précisant grace à un concept ce que tu attend, tu vas pouvoir supprimer tout un ensemble d'erreur, réduisant ainsi le bruit.

    Bref, c'est autant un moyen d'améliorer les erreurs que de rajouter (facilement) des contraintes additionnelles.