模板类的返回类型未知

Til*_*ngh 4 c++

我创建了一个矩阵类,并希望添加两个不同数据类型的矩阵.就像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);
}
Run Code Online (Sandbox Code Playgroud)

这里应该是什么"东西"???

还应该做什么,以便我可以使用"res"外面if else语句???

Dre*_*ann 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...
}
Run Code Online (Sandbox Code Playgroud)

使用这种语法,你的"东西"将是C++通常在添加两种模板类型时产生的类型.

  • @TilakRajSingh我倾向于同意Drew Dormann,因为对于C++ 03来说解决方案更复杂,这里的答案对C++ 11来说是有效的.我也会说留下这个问题(也许接受一个答案)并问另一个标有"C++ 03"的人(这并不意味着我认为自己比Drew更聪明:D)Sry重新标记这个btw.比它帮助更令人困惑 (2认同)