看板 C_and_CPP 關於我們 聯絡資訊
最近在看一些COM的實作 不確定他的concrete class是不是"故意"用private 繼承 然後我看到的都是使用 C style的轉型,實作queryinterface. 結果引發了一些想法於是寫了一些測試code https://ideone.com/fYoRWE 我的大疑問是 casting後 因為多重繼承 應該轉型後要有offset的差異 1. 如果queryinterface是在class 內實作 確實可以使用static_cast 轉型this(即使是private繼承), 達到成功的轉型 2. 由於C style 轉型 他有順序性的選擇使用c++的轉型 https://en.cppreference.com/w/cpp/language/explicit_cast 於是我就想....那如果把queryinterface抽離class變成一個non-member function, C St yle轉型還會成功嗎? 結果是會, 但沒有辦法理解為什麼C style會成功, 他到底最後用了 什麼C++ 轉型? 3. 既然C Style能成功, 我就會認為 那用C++ cast應該也能做得到, 但真的能compile過 的只能透過reinterpret_cast, 但結果當然是offset不會變, 這樣就讓我更是不解 2. 是 怎麼做到的? 用cpp cast能做到嗎? 以上 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.10.5.223 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1570627234.A.098.html
AstralBrain: 你是不是沒有把自己貼的連結好好讀一遍... 10/10 00:26
AstralBrain: 很上面的地方就有講了 10/10 00:26
lovejomi: 沒看到耶? 你是說static_cast嗎? 但我現在private繼承 10/10 10:43
lovejomi: incomplete class types 如果是這段 我也沒有incomplete 10/10 11:14
AstralBrain: 對你是private繼承, 那頁也剛好只有一個地方提到 10/10 14:19
AstralBrain: private繼承. 去看懂他在寫什麼 10/10 14:19