• [^] # Re: Le C++ est terrible... et ce journal l'illustre bien

    Posté par (site web personnel) . En réponse au journal Une structure partiellement constante en C++. Évalué à 10.

    un problème dont on n'est pas sûr qu'il en soit un

    J'ai effectivement assez peu motivé mon cas d'usage. Si tu as une structure de tableau qui a comme variable membre un tableau qui contient à chaque indice le nombre d'éléments dans cette dimension, par exemple :

    template<class T, size_t N>
    class ndarray {
     std::array<long, N> shape;
     T* data;
    };

    Si l'utilisateur sait que la dernière dimension vaut toujours 3, par exemple parce que c'est une matrice de pixels, cette représentation va être pénalisante quand on voudra par courir la dernière dimension, car le compilateur n'a pas moyen d'éviter l'itération. En résultent des temps d'exécution déplorables.

    for(long i = 0, n = a.shape[2]; i < n; ++i)
     a.data[index(i)];
    

    Si on encode dans le type de shape l'information comme quoi la dernière dimension est constante (et petite), et que cette constante est connue, on arrive à

    template<class T, class pS>
    class ndarray {
     pS shape;
     T* data;
    };

    et le compilo aura toutes les informations pour dérouler complètement l'itération.

    une solution dont on n'est pas sûr qu'elle a un intérêt

    J'espère que maintenant qu'elle est motivée, son intérêt transparait mieux :-)

    je suis peut-être un peu sec

    Le demi-sec, c'est moyen, j'ai une nette préférence pour le brut bien râpeu, mais bon, les goûts et les couleurs...