2010-01-08 71 views

回答

8

__interface修飾符是一個Visual C++擴展來幫助實現COM接口。這允許你指定一個COM接口並強制執行COM接口規則。

因爲COM是C兼容的定義,所以不能有運算符Ctor或Dtors。

+0

所以,如果我想與操作員建立「界面」,是我唯一的選擇純虛擬類嗎? – iano 2010-01-08 21:03:53

+1

你的「唯一選擇」是編寫一個標準的C++類,是的。有很多方法取決於你需要什麼。一個純粹的抽象類是最接近Java/C#類型的接口,但在很多情況下,C++中更好的解決方案是不定義接口。使用模板提供的duck-typing,並簡單地定義一個類必須支持的概念,並且不要求它需要派生任何東西。或者使用CRTP慣用法爲靜態多態性提供接口。 – jalf 2010-01-08 23:05:03

1

這看起來像一個.dll的東西。您需要一個方法名稱,以便您可以使用其他不支持操作員重載的語言,例如C

1

接口不能包含運算符,因爲運算符不能是虛函數。基本上接口是其他類派生自的基類。

編輯:在閱讀了評論和思考這個之後,我意識到這是多麼愚蠢。請原諒我急切的手指。運營商與其他功能沒有區別。一個更可能的原因與從公共基類派生的__interface生成類有關,並且需要dll具有它們在本地使用的所有構造函數,析構函數和賦值運算符。

+0

運算符**可以是虛擬的相關問題:http://stackoverflow.com/questions/669818/virtual-assignment-operator-c – sbk 2010-01-08 18:28:12

+0

運算符在標準C++中可以是虛擬的。它們中的很多不應該是,因爲例如'operator ='應該引用與參數相同的類型,並且您可能會嘗試做多態分配時遇到各種麻煩。但'operator []'是多態性的合理候選者。無可否認,非虛擬接口習慣在純C++中通常是可取的,但對於非操作符函數也是如此。 – 2010-01-08 18:30:06