我有以下的地图类型...解决运营商歧义
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