全局运算符+覆盖冲突检测

时间:2013-09-27 17:00:02

标签: c++ override operator-keyword

我的代码与第三方库发生冲突。我定义了这个:

inline __m128 operator + (__m128 a, __m128 b)
{
    return _mm_add_ps(a, b);
}

但是

error C2084: function '__m128 operator +(const __m128,const __m128)' already has a body

我无法更改第三方库,并且他们不会#define将此运营商标识为已定义的任何内容。有没有一种方法(也许使用SFINAE),任何人都知道允许他们的定义占上风?

1 个答案:

答案 0 :(得分:2)

您想要定义该运算符的任何原因?是不是来自任何库定义类型__m128

的定义

运算符实际上是参数类型接口的一部分。它们不应由外部方定义(在这种情况下,)。

SFINAE至少不能直接帮助你,因为SFINAE仅适用于模板,而你真的不想要模板(你不想为任何operator+ >类型,你呢?)。通过足够的努力,您可以构建一些似乎有用的东西,但这取决于编译器是否在源代码中使用+的{​​{1}}每次使用时都会看到库中运算符的定义。

如果在某些但不是所有用例中链接的库中定义了运算符,则可以使用#ifdef包含运算符的定义,并使用define来控制是否定义运算符在建设时间。