實施IUnknown::QueryInterface()
的典型方式是:使用if-else-if
鏈每個支持的接口ID並執行以下操作:在QueryInterface實現中應該使用dynamic_cast嗎?
if(iid == __uuidof(IInterfaceN)) {
*ppv = static_cast<IInterfaceN>(this);
//call Addref(), return S_OK
}
現在static_cast
is necessary這裏在多重繼承的情況適當的指針調整。
有一段時間我看到的實現,而不是使用dynamic_cast
。國際海事組織這是浪費時間 - 結果將是相同的,它只會花費更長的時間,並使實施過度工程化。
是否有使用dynamic_cast
在任何情況下,確實有必要將它複製到的IUnknown::QueryInterface()
實施void**
參數之前鑄造this
指針?
Emm ...你能否提供一些最簡單的這種層次結構的例子? – sharptooth 2011-02-03 11:41:45