是否可以找到两个模板参数之间表达式的类型

Is it possible to find out the type of an expression between two template parameters?

本文关键字:参数 之间 表达式 类型 两个 是否      更新时间:2023-10-16

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

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

当我们添加这两个矩阵时,我们应该获得以下类型的矩阵C:int double(在这种情况下,应首选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;
}

是否可以使它起作用,还是我坚持使用返回矩阵的特定类型?

问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(此功能不得出现在潜在评估的上下文中(。