0

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

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

我无法更改第 3 方库,并且他们不会 #define 任何标识此运算符已被定义的内容。有没有人知道的方法(可能使用 SFINAE)让他们的定义占上风?

4

1 回答 1

2

有什么理由要定义该运算符?它不应该来自定义类型的任何库__m128吗?

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

SFINAE 至少不能直接帮助您,因为 SFINAE 仅适用于模板,并且您真的不希望那里有模板(您不想提供operator+任何类型,对吗?)。通过足够的努力,您可以构建一些看起来可行的东西,但这取决于编译器是否在每次使用+源代码中的这些类型时都能看到库中运算符的定义。

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

于 2013-09-27T17:10:02.423 回答