wtf to WTF? (w bazie kodu WebKit)

92

Pobrałem Chromium bazę kodu „s i przebiegł przez nazw 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

Czy to oznacza to, co myślę, że to znaczy? Mogło być tak, to bitwise_castrealizacja podano tutaj, jeśli nie zostanie skompilowany albo TOczy FROMnie jest POD i nie jest (AFAIK) mocniejszy niż w C ++ zbudowany reinterpret_cast.

Jedyny punkt światła, który tutaj widzę, to ten, którego nikt nie używa bitwise_castw projekcie Chromium.

Motti
źródło
4
Prawdopodobnie dobrym pomysłem jest zacytowanie części „BRAK GWARANCJI”.
MSalters
@KennyTM, zobacz meta.stackexchange.com/questions/45844/ ... w celu omówienia sposobu oznaczania tego pytania
Earlz,
Wow, ta klasa nie jest opisana przez „Web Template Framework”. To tylko wygodny skrót.
macetw

Odpowiedzi:

82

Jest to skrót od W eb T embedate F ramework i zapewnia powszechnie używane funkcje w całej bazie kodu WebKit.

ismail
źródło
2
jak w szablonach C ++ wykonujących typowe rzeczy :)
ismail
jakikolwiek sposób na sklonowanie tej biblioteki?
Victor
Cytaty proszę. Czy tworzy szablony jak Mustache lub JSP?
adib
@adib Nie, „szablon” tak naprawdę odnosi się do szablonów C ++ i nic więcej. Zobacz trac.webkit.org/wiki/SourceDirectory i webkit.org/blog/6161/locking-in-webkit (dla źródeł WebKit) i chromium.googlesource.com/chromium/src/+/master/third_party/… (dla Blink źródło).
Timothy Gu
2

Możliwe, że implementacja bitwise_cast określona tutaj daje niezdefiniowane zachowanie, jeśli DO lub FROM nie jest POD

Jeśli FROM lub TO nie są typami POD, kompilacja zakończyłaby się niepowodzeniem z obecnym standardem C ++, ponieważ nie byłbyś w stanie umieścić ich w unii.

Artem
źródło
1
Niepewny. Jeśli twoja klasa zawiera wskaźnik do elementu członkowskiego, nie jest to POD, ale myślę, że nadal może znajdować się w unii.
MSalters