質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Generics

Genericsはパラメトリックなポリモーフィズムの形態であり、.NET やJavaなど、様々な言語に実装されています。C++のテンプレートと同等の機能を持ち合わせています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

0回答

489閲覧

+演算子をジェネリックな型で使う方法

segnana

総合スコア28

Generics

Genericsはパラメトリックなポリモーフィズムの形態であり、.NET やJavaなど、様々な言語に実装されています。C++のテンプレートと同等の機能を持ち合わせています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2022/08/17 17:32

+演算子をジェネリックな変数に使う方法を知りたいです。
以下のような、x, yの型としてint, float, doubleなどを想定した2次元上の点を表すクラスを作りたいのですが、
+演算子をTに用いることができないという旨のエラーが出ます。

C#

1public class MyPoint<T> 2{ 3 T x; 4 T y; 5 6 public MyPoint(T x, T y) 7 { 8 this.x = x; 9 this.y = y; 10 } 11 12 public MyPoint<T> Add(MyPoint<T> point) 13 { 14 x = this.x + point.x; 15 y = this.y + point.y; 16 return new MyPoint<T>(x, y); 17 } 18}
エラーメッセージ error CS0019: Operator '+' cannot be applied to operands of type 'T' and 'T'

型Tのオブジェクトからあるメソッドを呼び出したい場合はそれが実装されていることを保証するようなインターフェイスをwhereを用いて指定すればよいと思うのですが、
以上のような演算子の場合はどのように型制約をすればよいのでしょうか?

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

segnana

2022/08/20 01:38 編集

ありがとうございます。 ざっと見たところすごくスマートと言えるやり方は今のところなさそうな感じがしました。 将来のINumberなどの公式の実装を待つことにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問