是否可以找到两个模板参数之间表达式的类型
Is it possible to find out the type of an expression between two template parameters?
我正在创建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
(此功能不得出现在潜在评估的上下文中(。
相关文章:
- C++模板参数之间的比较似乎被忽略了
- RVALUE参考与const lVALUE参考作为参数之间的混淆
- Rcpp 中值和引用参数之间的差异
- 是否可以找到两个模板参数之间表达式的类型
- C++和C#中指针和函数参数之间的等价性
- 如何根据模板两个整数参数之间的关系对模板进行部分专用化
- 如何在C++17中强制执行模板和模板模板参数之间的约束
- GoogleTest参数化测试-可以在参数之间调用SetUp和TearDown
- 在进行正向声明时,不命名参数和命名参数之间有区别吗
- 常量和常量引用参数之间的区别是什么
- 这些参数之间有什么区别
- C/C++,在使用全局参数或传递参数之间进行选择
- printf函数参数之间的序列点;转换之间的顺序点是否重要
- 函数参数之间的差异
- 二维数组参数之间的区别是什么?
- & 和 * 作为参数之间的差异
- 在模板函数参数之间强制执行所需的关系
- 带括号和不带括号的可变参数之间的差异
- "类变量"、"类变量()"和"类变量(参数)"之间的区别
- 在C++中用 & 和 * 声明的函数参数之间的差异