2009-05-07 24 views
79

Tôi đã tải xuống cơ sở mã của Chromium và chạy trên WTF namespace.wtf là WTF? (trong cơ sở mã 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 

Điều này có nghĩa là ý tôi nghĩa là gì? Có thể như vậy, việc triển khai bitwise_cast được chỉ định ở đây sẽ không biên dịch nếu TO hoặc FROM không phải là POD và không (AFAIK) mạnh hơn C++ được xây dựng trong reinterpret_cast.

Điểm duy nhất của ánh sáng tôi thấy ở đây là không ai có vẻ đang sử dụng bitwise_cast trong dự án Chromium.

+2

lẽ là một ý tưởng tốt để trích dẫn "KHÔNG BẢO ĐẢM" phần. – MSalters

+0

@KennyTM vui lòng xem http://meta.stackexchange.com/questions/45844/is-the-tag-wtf-acceptable để thảo luận về cách gắn thẻ câu hỏi này – Earlz

+0

Ồ, lớp học đó không được mô tả bởi "Khuôn khổ mẫu web . " Nó chỉ là một từ viết tắt thuận tiện. – macetw

Trả lời

69

Đó là viết tắt của W ebT emplate F ramework và cung cấp thường được sử dụng các chức năng trên tất cả các codebase WebKit.

+19

như trong "khuôn khổ mẫu web hàng ngày?" – CashCow

+1

như trong các mẫu C++ làm công cụ phổ biến :) – ismail

+0

cách nào nhân bản thư viện đó? – Victor

2

Có thể là như vậy, việc thực hiện bitwise_cast quy định ở đây mang lại hành vi undefined nếu một trong hai đến hoặc từ không phải là một POD

Nếu từ hay sang không loại POD, biên soạn sẽ thất bại với C hiện ++ chuẩn vì bạn sẽ không thể kết hợp chúng.

+0

Đúng vậy, tôi sẽ sửa câu hỏi. – Motti

+1

Không chắc chắn. Nếu lớp của bạn có chứa một con trỏ-thành viên, nó không phải là một POD nhưng nó vẫn có thể đi trong một công đoàn, tôi nghĩ. – MSalters

Các vấn đề liên quan