我创建了一个矩阵类,想要添加两个不同数据类型的矩阵。就像int和double返回类型的matrice应该是double。我怎样才能做到这一点??? 这是我的代码
template<class X>
class Matrix
{
..........
........
template<class U>
Matrix<something> operator+(Matrix<U> &B)
{
if((typeid(a).before(typeid(B.a))))
Matrix<typeof(B.a)> res(1,1);
else
Matrix<typeof(a)> res(1,1);
}
这里应该是什么“东西”???
还应该做什么,以便我可以在外面使用“res”if else声明???
答案 0 :(得分:5)
您可以使用 C ++ 11的自动返回类型语法处理这两个问题 @DyP 的慷慨帮助:)。
template<typename U>
Matrix <decltype(declval<X>()+declval<U>())> operator+(const Matrix<U> &B) const
{
Matrix< decltype( declval<X>() + declval<U>() ) > res;
// The rest...
}
使用这种语法,你的“东西”将是C ++通常在添加两种模板类型时产生的类型。
答案 1 :(得分:4)
尝试common_type
:
#include <type_traits>
template <typename T>
class Matrix
{
// ...
template <typename U>
Matrix<typename std::common_type<T, U>::type>
operator+(Matrix<U> const & rhs)
{
typedef typename std::common_type<T, U>::type R;
Matrix<R> m; // example
// ...
return m;
}
};