- 締切済み
comのidlにおけるオーバーロード
VC++2005を利用しています。 comのidlにおけるオーバーロード・オーバーライドは未サポートと聞いたのですが本当でしょうか? comで生成する自前クラスのオブジェクト比較を行いたく、 比較演算子(==)をオーバーロードしたいのですが、 他に方法があるのでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- machongola
- ベストアンサー率60% (434/720)
回答No.1
こんばんは。 的外れでしたらご勘弁を。 operator系のオーバーロードは不可能な筈です。 I???インターフェースがClassAなのかClassBなのか、と言う事でしたら、当方の手元にあるCOM/OLEの書籍では、ピザの種類を見抜くため(クラスの比較とは違うのですが)にtypedef enumを使用して送り返しています。 interface I??? : public IDispatch { HRESULT STDCALL ClassIsA(TypeOfClass* pType) = PURE; }; //IDL側 typedef enum { ClassA, ClassB } TypeOfClass; [propget, id(?), helpstring("property get type of class")] HRESULT ClassIsA([out, retval] TypeOfClass* pType); //利用する時 TypeOfClass toc1; TypeOfClass toc2; p1->ClassIsA(&toc1); p2->ClassIsA(&toc2); if(toc1 == toc2) { //クラスの型が一致 }
お礼
machongola様 ご回答ありがとうございました。 オブジェクト同士を比較する場合には やはり1クッション操作を入れないと駄目ですね。 今回の目的は、JavaScript側で if(toc1 == "ClassIsA") { } というようにObjectと文字列を比較したいので、 どうすれば良いのかと・・・