wtf là WTF? (trong cơ sở mã WebKit)


91

Tôi đã tải xuống cơ sở mã của Chromium và chạy trên không gian tên 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

Điều này có nghĩa là những gì tôi nghĩ nó có nghĩa là? Có thể như vậy, việc bitwise_casttriển khai được chỉ định ở đây sẽ không biên dịch nếu một trong hai TOhoặc FROMkhông phải là POD và không (AFAIK) mạnh hơn C ++ được tích hợp sẵn reinterpret_cast.

Điểm sáng duy nhất tôi thấy ở đây là dường như không ai sử dụng bitwise_casttrong dự án Chromium.


4
Có lẽ là một ý kiến ​​hay khi trích dẫn phần "KHÔNG BẢO HÀNH".
MSalters

@KennyTM vui lòng xem meta.stackexchange.com/questions/45844/… để thảo luận về cách gắn thẻ câu hỏi này
Earlz

Chà, lớp đó không được mô tả bằng "Khuôn khổ mẫu web". Nó chỉ là một cách viết tắt tiện lợi.
macetw

Câu trả lời:


81

Nó là viết tắt của W eb T emplate F ramework và cung cấp các chức năng thường được sử dụng trên toàn bộ cơ sở mã WebKit.


2
như trong C ++ templates làm công cụ phổ biến :)
ismail

bất kỳ cách nào để nhân bản thư viện đó?
Victor

Xin vui lòng trích dẫn. Nó có tạo khuôn mẫu như Mustache hoặc JSP không?
adib

@adib Không, "mẫu" thực sự đề cập đến các mẫu C ++ và không có gì khác. Xem trac.webkit.org/wiki/SourceDirectorywebkit.org/blog/6161/locking-in-webkit (dành cho nguồn WebKit) và chromium.googlesource.com/chromium/src/+/master/third_party/… (dành cho Blink nguồn).
Timothy Gu


2

Có thể như vậy, việc triển khai bitwise_cast được chỉ định ở đây mang lại hành vi không xác định nếu TO hoặc FROM không phải là POD

Nếu FROM hoặc TO không phải là loại POD, quá trình biên dịch sẽ không thành công với tiêu chuẩn C ++ hiện tại vì bạn sẽ không thể đặt chúng vào liên kết.


1
Không chắc. Nếu lớp của bạn chứa một con trỏ đến thành viên, nó không phải là POD nhưng nó vẫn có thể đi trong một liên minh, tôi nghĩ vậy.
MSalters
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.