我的代码与第三方库发生冲突。我定义了这个:
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),任何人都知道允许他们的定义占上风?
答案 0 :(得分:2)
您想要定义该运算符的任何原因?是不是来自任何库定义类型__m128
?
运算符实际上是参数类型接口的一部分。它们不应由外部方定义(在这种情况下,你)。
SFINAE至少不能直接帮助你,因为SFINAE仅适用于模板,而你真的不想要模板(你不想为任何operator+ >类型,你呢?)。通过足够的努力,您可以构建一些似乎有用的东西,但这取决于编译器是否在源代码中使用+
的{{1}}每次使用时都会看到库中运算符的定义。
如果在某些但不是所有用例中链接的库中定义了运算符,则可以使用#ifdef
包含运算符的定义,并使用define来控制是否定义运算符在建设时间。