wtf คือ WTF? (ในฐานรหัส WebKit)


92

ฉันดาวน์โหลดโครเมียมฐานรหัส 's และวิ่งข้าม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

นี่หมายความว่าฉันคิดว่ามันหมายความว่าอย่างไร? อาจเป็นเช่นนั้นbitwise_castการนำไปใช้งานที่ระบุไว้ที่นี่จะไม่รวบรวมถ้าอย่างใดอย่างหนึ่งTOหรือFROMไม่ใช่PODและไม่ (AFAIK) มีประสิทธิภาพมากกว่า C ++ ในreinterpret_castตัว

จุดเดียวของแสงที่ฉันเห็นคือดูเหมือนว่าไม่มีใครใช้bitwise_castในโครงการ Chromium


4
อาจเป็นความคิดที่ดีที่จะอ้างถึงส่วน "ไม่มีการรับประกัน"
MSalters

@KennyTM โปรดดูที่meta.stackexchange.com/questions/45844/…สำหรับการสนทนาเกี่ยวกับวิธีติดแท็กคำถามนี้
Earlz

ว้าวคลาสนั้นไม่ได้อธิบายโดย "Web Template Framework" เป็นเพียงตัวย่อที่สะดวก
macetw

คำตอบ:


82

มันย่อมาจากW eb T emplate F ramework และมีฟังก์ชันที่ใช้กันทั่วไปทั่วทั้ง WebKit codebase


2
เช่นเดียวกับแม่แบบ C ++ ที่ทำสิ่งทั่วไป :)
ismail

วิธีใดในการโคลนห้องสมุดนั้น?
วิกเตอร์

กรุณาอ้างอิง มันทำเทมเพลตเช่น Moustache หรือ JSP หรือไม่
adib

@adib ไม่ใช่ "เทมเพลต" หมายถึงเทมเพลต C ++ จริงๆและไม่มีอะไรอื่น ดูtrac.webkit.org/wiki/SourceDirectoryและwebkit.org/blog/6161/locking-in-webkit (สำหรับแหล่งที่มาของ WebKit) และchromium.googlesource.com/chromium/src/+/master/third_party/… (สำหรับ Blink ที่มา).
Timothy Gu


2

อาจเป็นเช่นนั้นการใช้งาน bitwise_cast ที่ระบุที่นี่จะให้ผลการทำงานที่ไม่ได้กำหนดไว้หาก TO หรือ FROM ไม่ใช่ POD

ถ้า FROM หรือ TO ไม่ใช่ประเภท POD การคอมไพล์จะล้มเหลวด้วยมาตรฐาน C ++ ปัจจุบันเนื่องจากคุณไม่สามารถรวมเข้าด้วยกันได้


1
ไม่แน่ใจ. ถ้าชั้นเรียนของคุณมีตัวชี้ถึงสมาชิกมันไม่ใช่ POD แต่ยังคงสามารถรวมกลุ่มกันได้
MSalters
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.