apa itu WTF? (dalam basis kode WebKit)

92

Saya mengunduh basis kode Chromium dan berlari melintasi namespace 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

Apakah ini berarti apa yang menurut saya artinya? Bisa jadi, bitwise_castimplementasi yang ditentukan di sini tidak akan dikompilasi jika salah satu TOatau FROMbukan POD dan tidak (AFAIK) lebih kuat daripada C ++ bawaan reinterpret_cast.

Satu-satunya titik cahaya yang saya lihat di sini adalah tampaknya tidak ada yang menggunakan bitwise_castdalam proyek Chromium.

Motti
sumber
4
Mungkin ide yang bagus untuk mengutip bagian "TANPA JAMINAN".
MSalters
@KennyTM silakan lihat meta.stackexchange.com/questions/45844/… untuk diskusi tentang cara memberi tag pada pertanyaan ini
Earlz
Wow, kelas itu tidak dijelaskan oleh "Kerangka Template Web." Itu hanya singkatan yang nyaman.
macetw

Jawaban:

82

Ini adalah singkatan dari W eb T emplate F ramework dan menyediakan fungsi yang umum digunakan di seluruh basis kode WebKit.

ismail
sumber
2
seperti dalam template C ++ melakukan hal-hal umum :)
ismail
cara apa pun untuk mengkloning perpustakaan itu?
Victor
Mohon kutipannya. Apakah itu melakukan template seperti Moustache atau JSP?
adib
@adib Tidak, "template" benar-benar merujuk ke template C ++ dan tidak ada yang lain. Lihat trac.webkit.org/wiki/SourceDirectory dan webkit.org/blog/6161/locking-in-webkit (untuk sumber WebKit) dan chromium.googlesource.com/chromium/src/+/master/third_party/… (untuk Blink sumber).
Timothy Gu
2

Bisa jadi, implementasi bitwise_cast yang ditentukan di sini menghasilkan perilaku tidak terdefinisi jika TO atau FROM bukan POD

Jika FROM atau TO bukan tipe POD, kompilasi akan gagal dengan standar C ++ saat ini karena Anda tidak akan dapat menggabungkannya.

Artyom
sumber
1
Tidak yakin. Jika kelas Anda berisi pointer-to-member, itu bukan POD tetapi masih bisa disatukan, saya kira.
MSalters