テンプレートと組み合わせてバイナリ算術演算子を使用するにはどうすればよいですか?

ナディーン

T値という1つの属性のみを含むクラス番号を作成しました。私は現在テンプレートについて学んでいるので、Tはデータ型です。私が達成したいのは、次のような計算を行うことです。

Number<int>(2) + Number<double>(1.2)

これまでのところ操作はできますが、2つの異なるデータ型があると失敗します。これまで私はこれを書いてきました:

//class template

template<class T>
class Number
{
public:

    T value;

    Number(T num1)
    {
        value = num1;
    }

    Number<T> operator + ( const Number<T> &other) const
    {
        return Number<decltype(value+other.value)> (value+other.value);
    }

};

データ型が同じ場合にのみ算術演算を実行します。

質問:

  • プログラムが同じデータ型でのみ機能するのはなぜですか?

これは私が自分で部分的に答えることができます。私は次の行を使用します:

Number<T> operator + ( const Number<T> &other) const

したがって、左側がタイプの場合intすべてのTはになりますintエラーが発生せずに変更する必要がある方法がわかりません。

  • 異なるデータ型で計算を行うには、何を修正する必要がありますか?

編集:

制約は、テンプレートに1つの型引数しか含めることができないことです。

ytlu

提案されているように、2つのテンプレートパラメーターを使用してフレンドoperator +を宣言するだけでなく、メンバー関数operator +のセカンダリテンプレートを配置することもできます。これにより、キャストプラスを実行できます。

template<typename T>
class Number
 {
   public:
     T value;

     Number(const T&num1)
      {
         value = num1;
      }

 template <typename X> auto operator + ( const Number<X> &other) const
      {
         auto c = this->value + other.value;
         return Number<decltype(c)> ( c );
      }
};
#include <iostream>
int main()
{
    Number<int> n{2};
    Number<double> a{3.4};
    std::cout << (a+n).value << std::endl;
}

または、フレンド関数を使用することもできます(これはよりシンボリックな一貫性があると思います)。

template<typename T>
class Number
{
  public:

    T value;

    Number(T num1)
     {
        value = num1;
    }

   Number& operator +=( const Number<T> &other)
    {
       this->value += other.value;
       return *this;
    }
};
template <typename T1,typename T2> auto operator+(const Number<T1>&a, const Number<T2>&b)
{
    auto c = a.value + b.value;       
    return Number<decltype(c)>( c );
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

PHPで、インクリメント操作を実行せずに、変数と組み合わせてインクリメント演算子を使用するにはどうすればよいですか?

分類Dev

「ifステートメント」をモナークの日付と組み合わせて使用するにはどうすればよいですか?

分類Dev

pandasデータフレームでAND演算子とOR演算子を組み合わせるにはどうすればよいですか?

分類Dev

SQLAlchemyの「<< =」演算子と組み合わせて「ANY」フィルターを使用するにはどうすればよいですか?

分類Dev

SQLite3 IN演算子をLIKE演算子と組み合わせて、サブクエリに一致する部分的なテキストを取得するにはどうすればよいですか?

分類Dev

PLPGSQLでWITHをFORループと組み合わせて使用するにはどうすればよいですか?

分類Dev

オーバーレイマウントを使用して、複数のディレクトリを異なるサブディレクトリと組み合わせるにはどうすればよいですか?

分類Dev

標準ライブラリ演算子と競合することなく、関連するクラスのグループの演算子をテンプレートオーバーロードするにはどうすればよいですか?

分類Dev

バイナリの組み合わせの平均を取得するにはどうすればよいですか?

分類Dev

赤と青の符号なしバイトを組み合わせてブレンドを最適化するにはどうすればよいですか?

分類Dev

ビット演算子または算術演算子のみを使用して項(a <b?0:1)を表現するにはどうすればよいですか?

分類Dev

組み合わせた戻り値に基づいてswitchステートメントで&&演算子を使用するにはどうすればよいですか?

分類Dev

基準が異なる2つの列の値を使用して算術演算を行い、回答をすべて1つのクエリで組み合わせるにはどうすればよいですか?

分類Dev

複数の* ngIfを&&演算子と組み合わせて、角度のようにするにはどうすればよいですか?

分類Dev

非型テンプレートパラメーターと型テンプレートパラメーターを組み合わせて関数をテンプレート化するにはどうすればよいですか?

分類Dev

テンプレート参照変数をngIfと組み合わせるにはどうすればよいですか?

分類Dev

テンプレート参照変数をngIfと組み合わせるにはどうすればよいですか?

分類Dev

テンプレート参照変数をngIfと組み合わせるにはどうすればよいですか?

分類Dev

flavorDimensionsを使用してフレーバーの組み合わせごとに異なるapplicationIdを設定するにはどうすればよいですか?

分類Dev

UNIXシグナル(SIGUSR1など)とmysqlトリガーの組み合わせを使用するにはどうすればよいですか?

分類Dev

Rg.Plugins.Popupを使用してXAMLとテンプレートを1つのC#テンプレートに組み合わせるにはどうすればよいですか?

分類Dev

バイナリ関数と単項関数を組み合わせて、フォールドのステップ関数を取得するにはどうすればよいですか?

分類Dev

2つのリスト間で整数と演算のすべての組み合わせを取得するにはどうすればよいですか?

分類Dev

文字列と数字の組み合わせからバイトストリームを設定するにはどうすればよいですか?

分類Dev

論理ORと組み合わせた三項演算子を使用するにはどうすればよいですか?

分類Dev

IDと組み合わせたリストとしてデータフレームを要約するにはどうすればよいですか?

分類Dev

汎用テンプレートを使用してクラスの演算子をオーバーロードするにはどうすればよいですか?

分類Dev

@DataJpaTest @SpringBootTestを1つのMVCアプリケーションに組み合わせて、すべてのレイヤーをテストするにはどうすればよいですか?

分類Dev

2つのテンソルを組み合わせてオーバーラップするにはどうすればよいですか?

Related 関連記事

  1. 1

    PHPで、インクリメント操作を実行せずに、変数と組み合わせてインクリメント演算子を使用するにはどうすればよいですか?

  2. 2

    「ifステートメント」をモナークの日付と組み合わせて使用するにはどうすればよいですか?

  3. 3

    pandasデータフレームでAND演算子とOR演算子を組み合わせるにはどうすればよいですか?

  4. 4

    SQLAlchemyの「<< =」演算子と組み合わせて「ANY」フィルターを使用するにはどうすればよいですか?

  5. 5

    SQLite3 IN演算子をLIKE演算子と組み合わせて、サブクエリに一致する部分的なテキストを取得するにはどうすればよいですか?

  6. 6

    PLPGSQLでWITHをFORループと組み合わせて使用するにはどうすればよいですか?

  7. 7

    オーバーレイマウントを使用して、複数のディレクトリを異なるサブディレクトリと組み合わせるにはどうすればよいですか?

  8. 8

    標準ライブラリ演算子と競合することなく、関連するクラスのグループの演算子をテンプレートオーバーロードするにはどうすればよいですか?

  9. 9

    バイナリの組み合わせの平均を取得するにはどうすればよいですか?

  10. 10

    赤と青の符号なしバイトを組み合わせてブレンドを最適化するにはどうすればよいですか?

  11. 11

    ビット演算子または算術演算子のみを使用して項(a <b?0:1)を表現するにはどうすればよいですか?

  12. 12

    組み合わせた戻り値に基づいてswitchステートメントで&&演算子を使用するにはどうすればよいですか?

  13. 13

    基準が異なる2つの列の値を使用して算術演算を行い、回答をすべて1つのクエリで組み合わせるにはどうすればよいですか?

  14. 14

    複数の* ngIfを&&演算子と組み合わせて、角度のようにするにはどうすればよいですか?

  15. 15

    非型テンプレートパラメーターと型テンプレートパラメーターを組み合わせて関数をテンプレート化するにはどうすればよいですか?

  16. 16

    テンプレート参照変数をngIfと組み合わせるにはどうすればよいですか?

  17. 17

    テンプレート参照変数をngIfと組み合わせるにはどうすればよいですか?

  18. 18

    テンプレート参照変数をngIfと組み合わせるにはどうすればよいですか?

  19. 19

    flavorDimensionsを使用してフレーバーの組み合わせごとに異なるapplicationIdを設定するにはどうすればよいですか?

  20. 20

    UNIXシグナル(SIGUSR1など)とmysqlトリガーの組み合わせを使用するにはどうすればよいですか?

  21. 21

    Rg.Plugins.Popupを使用してXAMLとテンプレートを1つのC#テンプレートに組み合わせるにはどうすればよいですか?

  22. 22

    バイナリ関数と単項関数を組み合わせて、フォールドのステップ関数を取得するにはどうすればよいですか?

  23. 23

    2つのリスト間で整数と演算のすべての組み合わせを取得するにはどうすればよいですか?

  24. 24

    文字列と数字の組み合わせからバイトストリームを設定するにはどうすればよいですか?

  25. 25

    論理ORと組み合わせた三項演算子を使用するにはどうすればよいですか?

  26. 26

    IDと組み合わせたリストとしてデータフレームを要約するにはどうすればよいですか?

  27. 27

    汎用テンプレートを使用してクラスの演算子をオーバーロードするにはどうすればよいですか?

  28. 28

    @DataJpaTest @SpringBootTestを1つのMVCアプリケーションに組み合わせて、すべてのレイヤーをテストするにはどうすればよいですか?

  29. 29

    2つのテンソルを組み合わせてオーバーラップするにはどうすればよいですか?

ホットタグ

アーカイブ