作者lovejomi (JOMI)
看板C_and_CPP
标题[问题] C style转型的盲点请教
时间Wed Oct 9 21:20:26 2019
最近在看一些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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1570627234.A.098.html
1F:推 AstralBrain: 你是不是没有把自己贴的连结好好读一遍... 10/10 00:26
2F:→ AstralBrain: 很上面的地方就有讲了 10/10 00:26
3F:→ lovejomi: 没看到耶? 你是说static_cast吗? 但我现在private继承 10/10 10:43
4F:→ lovejomi: incomplete class types 如果是这段 我也没有incomplete 10/10 11:14
5F:推 AstralBrain: 对你是private继承, 那页也刚好只有一个地方提到 10/10 14:19
6F:→ AstralBrain: private继承. 去看懂他在写什麽 10/10 14:19