gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:33:20 25 4
gpt4 key购买 nike

我正在用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com