c++ - 是否可以找出两个模板参数之间的表达式类型?

标签 c++ matrix

我正在用 C++ 创建一个库来处理任何类型的矩阵,我希望能够在两个不同类型的矩阵之间进行基本操作。

假设我有一个 int 类型的矩阵 A 和一个 double 类型的矩阵 B。

当我们将这两个矩阵相加时,我们应该得到一个类型为 int + double 的矩阵 C(在这种情况下,应该首选 double 以避免数据丢失)。

我正在使用具有两种类型的模板:T1 和 T2 来处理不同类型的矩阵,并且我尝试使用 typeid 来获取返回矩阵的类型。但是因为 typeid 不适用于 T1 和 T2(如果我理解正确的话)我被卡住了。

template<class T1, class T2> Matrix<T1> & operator+(Matrix<T1> Matrix1, Matrix<T2> Matrix2) {
    if(Matrix1.GetCol() != Matrix2.GetCol() || Matrix1.GetRows() != 
Matrix2.GetRows()){
        throw(EXC_DifferentDimensions);
    }

    Matrix<T3> * result = new Matrix<T3>(Matrix1.GetRows(), Matrix1.GetCol());

    for(unsigned int iRow = 0; iRow < Matrix1.GetRows(); iRow++){
        for(unsigned int iCol = 0; iCol < Matrix1.GetCol(); iCol++){
            result->SetElement(Matrix1.GetElement(iRow, iCol) + Matrix2.GetElement(iRow, iCol), iRow, iCol);
        }
    }
    return *result;
}

是否有可能让它工作,或者我是否坚持为返回的 Matrix 使用特定类型?

最佳答案

询问 C++ T1 + T2 的结果是什么:

template<class T1, class T2>
Matrix<decltype(std::declval<T1>() + std::declval<T2>()>&
operator+(Matrix<T1> Matrix1, Matrix<T2> Matrix2);

decltype(e) 是未计算表达式的类型 e ; std::declval<T>() 类型为 T (此函数不得出现在可能评估的上下文中)。

关于c++ - 是否可以找出两个模板参数之间的表达式类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55957390/

相关文章:

c++ - 为什么为位字段分配值不返回相同的值?

c++ - 递归函数周围的 lambda 包装器中的 this-pointer 捕获

python - 输入二维矩阵的每个元素的最短方法

c - 矩阵中的递归路径查找

c++ - 使用cmake创建UWP软件包

c++ - 学习OpenGL需要什么?

c++ - C++ 中逗号运算符的语法使用

python - 从 2D 矩阵中随机选取样本并将索引保​​留在 python 中

r - 在大矩阵中计算非对角线平均值的更快方法

从长格式的值重建对称矩阵