2009-05-07 18 views
79

J'ai téléchargé la base de code Chromium et a couru à travers le WTF namespace.wtf est WTF? (dans la base de code WebKit)

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? Pourrait être ainsi, l'implémentation bitwise_cast spécifiée ici ne compilera pas si TO ou FROM n'est pas un POD et n'est pas (AFAIK) plus puissant que C++ intégré dans reinterpret_cast.

Le seul point de lumière que je vois ici est que personne n'utilise bitwise_cast dans le projet Chromium.

+2

probablement une bonne idée de citer la partie « sans GARANTIE ». – MSalters

+0

@KennyTM s'il vous plaît voir http://meta.stackexchange.com/questions/45844/is-the-tag-wtf-acceptable pour une discussion sur la façon d'étiqueter cette question – Earlz

+0

Wow, cette classe n'est pas décrite par "Web Template Framework" " C'est juste une abréviation pratique. – macetw

Répondre

69

Il est court pour W ebT Emplate F et fournit ADRE fonctions les plus utilisées dans le code de base WebKit.

+19

comme dans "le cadre de modèle web quotidien?" – CashCow

+1

comme dans les modèles C++ faire des choses communes :) – ismail

+0

un moyen de cloner cette bibliothèque? – Victor

2

pourrait être, la mise en œuvre bitwise_cast spécifiée ici cède un comportement non défini si l'TO ou FROM est pas un POD

Si FROM ou TO ne sont pas les types POD, la compilation échouait à la norme actuelle C++ parce que vous ne seriez pas en mesure de les mettre en union.

+0

Vous avez raison, je vais corriger la question. – Motti

+1

Je ne suis pas sûr. Si votre classe contient un pointeur-à-un membre, ce n'est pas un POD mais il peut encore aller dans un syndicat, je pense. – MSalters