我有一个通用Matrix
类。当我处理值矩阵时,我有 SSE 优化的矩阵乘法函数Float
。目前,我的方法包括一个名为“doSSE_mulMM”的函数,它通过矩阵乘法进行矩阵乘法,包括几个检查,但它仅与Matrix<Float>
(它部分存在,因为我在代码中检查 SSE 功能并移动到更少如果 SSE 不可用,则有效乘法)。
对于我们的构建服务器正在运行的 GCC 版本,我收到此错误:
error: specialization of ‘MTI::Matrix<float>& MTI::Matrix<BT>::doSSE_MulMM(const MTI::Matrix<float>&, const MTI::Matrix<float>&, bool) [with BT = float]’ after instantiation
相同的代码在 Visual Studio 和我们 Linux 主机上的旧版本 GCC 中编译得很好。
我无法提供完整的代码,但这些是函数的签名:
矩阵.h
template <class BT>
class Matrix {
....
Matrix<Float>& doSSE_MulMM (const Matrix<Float>& mat1, const Matrix<Float>& mat2, bool softmax);
....
}
矩阵.cpp
template <>
Matrix<Float>& Matrix<Float>::doSSE_MulMM (const Matrix<Float>& mat1,
const Matrix<Float>& mat2,
bool softmax) {
....
}
only的函数doSSE_MulMM
对浮点矩阵真正有意义,但我更喜欢将其设为成员函数,因为它对矩阵的私有数据成员进行操作。有没有一种好方法可以将函数专门化为只存在于 Matrix 类的一个专门化中?我想我可以介绍一个通用版本,它会为其他数据类型引发异常,但这看起来很混乱。