- PR -

C#2.0 ジェネリクスの型について

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2006-07-04 14:48
ジャネリクスを用いて数値計算を行わせたいのです。

型に対してどうすれば必要な継承を教えることができるのか教えてください。


例えば下記の型Tに対して、intヤfloat等に対するキャストおよび
+=演算についての方法をint型ヤfloat型から各々継承することはできますか?

(説明のための例題であり実用上はあまり適切ではありませんがご容赦願います)


public class test
{

// ジェネリクスを使いたいが
// どうすればTに対して0のキャスト方法と+=ノ方法を教えることができますか
// Tはfloat or intにのみ置き換えることを想定しています。
// そして、float or int実装されている機能が継承できればOKです

public float sum(float[] inp)
{
return sum0<float>(inp);
}

public int sum(int[] inp)
{
return sum0<int>(inp);
}

/// <summary>
/// 積算
/// </summary>
/// <typeparam name="T float or intに置き換えることを想定"></typeparam>
/// <param name="inp 入力"></param>
/// <returns 結果></returns>
private T sum0<T>(T[] inp)
{
// キャストに失敗する
T ans = (T)0;
for (int i = 0; i < inp.Length; i++)
{
// += 演算に失敗する
ans += inp[i];
}
return ans;

}
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2006-07-04 20:03
諸農です。

where 制約にintやfloatを指定するのはダメですか。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-07-04 23:11
引用:

where 制約にintやfloatを指定するのはダメですか。


確かシールなクラスは指定できない筈です。(構造体はシール)

MSDN フォーラムでもほぼ同様の質問があったのですが、そのときは、「加算するデリゲート」を渡すしかないと答えましたが、そもそもジェネリックを使うシナリオではないでしょうね。

素直にオーバーロードするか、float か double バージョンだけ用意しておくのでもよいでしょう。int を渡せますし。
_________________
囚人のジレンマな日々
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2006-07-05 09:05
ご回答ありがとうございます。
これまで、数値計算のロジックを記述する場合、
int,long,float,doubleについて用意し、オーバーロードしていました。
ジェネリクスを使うことでパフォーマンスを落とさずコードの一元化が
図れるかも知れないと期待したので少し残念です。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2006-07-05 11:39
諸農です。

引用:

囚人さんの書き込み (2006-07-04 23:11) より:
引用:

where 制約にintやfloatを指定するのはダメですか。


確かシールなクラスは指定できない筈です。(構造体はシール)



その通りでした。
すみません。


引用:

素直にオーバーロードするか、float か double バージョンだけ用意しておくのでもよいでしょう。int を渡せますし。



めんどくさいですけど、インタフェースとしてはintなどのオーバーロードバージョンを用意しておいて、内部ではdoubleバージョンでロジックの一元化って言うのも良いかも知れませんね。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
1

スキルアップ/キャリアアップ(JOB@IT)