wtf est WTF? (dans la base de code WebKit)

91

J'ai téléchargé la base de code de Chromium et j'ai parcouru l' espace de noms WTF .

namespace WTF {
    /*
     * C++'s idea of a reinterpret_cast lacks sufficient cojones.
     */
    template<typename TO, typename FROM>
    TO bitwise_cast(FROM in)
    {
        COMPILE_ASSERT(sizeof(TO) == sizeof(FROM), WTF_wtf_reinterpret_cast_sizeof_types_is_equal);
        union {
            FROM from;
            TO to;
        } u;
        u.from = in;
        return u.to;
    }
} // namespace WTF

Est-ce que cela signifie ce que je pense que cela signifie? Cela pourrait être le cas, l' bitwise_castimplémentation spécifiée ici ne se compilera pas si l'un TOou l' autre FROMn'est pas un POD et n'est pas (AFAIK) plus puissant que le C ++ intégré reinterpret_cast.

Le seul point de lumière que je vois ici est que personne ne semble utiliser bitwise_castdans le projet Chromium.

Motti
la source
4
Probablement une bonne idée de citer la partie "AUCUNE GARANTIE".
MSalters
@KennyTM s'il vous plaît voir meta.stackexchange.com/questions/45844/… pour une discussion sur la façon de baliser cette question
Earlz
Wow, cette classe n'est pas décrite par «Web Template Framework». C'est juste une abréviation pratique.
macetw

Réponses:

81

C'est l'abréviation de W eb T emplate F ramework et fournit des fonctions couramment utilisées dans toute la base de code WebKit.

ismail
la source
2
comme dans les modèles C ++ faisant des trucs courants :)
ismail
un moyen de cloner cette bibliothèque?
Victor le
Citations s'il vous plaît. Fait-il des modèles comme Moustache ou JSP?
adib
@adib Non, le "modèle" fait vraiment référence aux modèles C ++ et rien d'autre. Voir trac.webkit.org/wiki/SourceDirectory et webkit.org/blog/6161/locking-in-webkit (pour les sources WebKit) et chromium.googlesource.com/chromium/src/+/master/third_party/… (pour Blink la source).
Timothy Gu le
2

Cela pourrait être le cas, l'implémentation bitwise_cast spécifiée ici produit un comportement non défini si TO ou FROM n'est pas un POD

Si FROM ou TO ne sont pas des types POD, la compilation échouerait avec le standard C ++ actuel car vous ne pourriez pas les mettre en union.

Artyom
la source
1
Pas certain. Si votre classe contient un pointeur vers un membre, ce n'est pas un POD mais il peut quand même entrer dans une union, je pense.
MSalters