我有以下的地圖類型...解決運營商歧義
std::map<D3DXCOLOR, ID3DXMesh*>
在編譯過程中,xfunctional抱怨說,它無法解決有關的密鑰類型歧義;
error C2593: 'operator <' is ambiguous
編譯器檢測到的候選運算符如下;
- 內置C++操作者<(DWORD,DWORD)
- 內置C++操作者<(FLOAT,FLOAT)
- 內置C++操作者<(D3DCOLORVALUE,D3DCOLORVALUE)
D3DXCOLOR結構由4個浮標組成r,g,b和a,但沒有定義運營商<。但它確實爲DWORD FLOAT和D3DCOLORVALUE提供了強制轉換函數,因此是候選列表中的條目。
我正在考慮解決此問題的最佳方法。我可以爲D3DXCOLOR編寫我自己的內聯運算符,將顏色包裝在提供自己的運算符<的新類中,或者可以以某種方式向編譯器提示哪些實現應該從候選列表中選擇? DWORD運算符<將充分滿足我的要求。
謝謝,這非常合理。由於地圖僅用於內部對象,因此我選擇使用比較函子對象提供地圖,該對象的執行在執行<操作時將lhs和rhs都轉換爲DWORD。 – 2011-03-09 11:46:08
+1。我喜歡第二種解決方案! – Nawaz 2011-03-09 12:23:08
第二個解決方案非常神祕 - 我不確定你是否真的想*專門化'std :: less',但不能重載'operator <'來匹配。這意味着'std :: map'和'std :: set''只對這個類型起作用,但是普通的比較不會,當你定義的順序基本上是任意的有一個。但是這也意味着函數式編程作爲一種副作用起作用,使用基本上任意的順序,如果有充分的理由不提供'operator <',這是危險的。 – 2011-03-09 12:34:43