4

マトリックス クラスを作成しましたが、異なるデータ型の 2 つのマトリックスを追加したいと考えています。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

@DyP の寛大な支援により、C++11 の auto return type 構文 を使用して、これらの問題の両方を処理できます:)。

template<typename U>
Matrix <decltype(declval<X>()+declval<U>())> operator+(const Matrix<U> &B) const
{
    Matrix< decltype( declval<X>() + declval<U>() ) > res;

    // The rest...
}

この構文では、「何か」は、2 つのテンプレート型が追加されたときに C++ が通常生成する型になります。

于 2013-04-25T23:09:09.630 に答える