4

我创建了一个矩阵类,并想添加两个不同数据类型的矩阵。像 int 和 double 返回类型的矩阵应该是 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);
}

这里应该是什么“东西”???

另外应该怎么做才能在if else语句之外使用“res”???

4

2 回答 2

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++ 通常生成的类型。

于 2013-04-25T23:09:09.630 回答
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;
    }
};
于 2013-04-25T23:08:33.457 回答