C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

算術演算可能であることを示すinterface


(過去ログ 7 を表示中)

[トピック内 20 記事 (1 - 20 表示)]  << 0 >>

■7477 / inTopicNo.1)  算術演算可能であることを示すinterface
  
□投稿者/ επιστημη 中佐(216回)-(2006/10/13(Fri) 01:49:32)
επιστημη さんの Web サイト

分類:[.NET 全般] 


分類:[.NET 全般] 

geneic関数をこしらえようとしています。たとえば:

class Calc {
public static T plus<T>(T x, T y) /* ココ */ {
return x + y;
}
}

このままじゃエラーです。
型Tに対し + 演算が定義されていることをコンパイラが知らないので。

なので /*ココ*/ んとこに "Tは足せる" って制約を書かなきゃいかんのですが、
そんなのは定義されていないんでしょうか?

public interface 足せる<T> {
T add(T value); // 'それ'にvalueを足す
}

class Calc {
public static T plus<T>(T x, T y) where T : 足せる<T> {
return x.add(y);
}
}

これだと int, long, string などなど当然足せて然るべきものに対しplusできません。
なんか手立てはないものでしょうか。


0
引用返信 編集キー/
■7478 / inTopicNo.2)  Re[1]: 算術演算可能であることを示すinterface
□投稿者/ 中博俊 神(795回)-(2006/10/13(Fri) 02:06:04)

分類:[.NET 全般] 

ねっすね。
ってのが今のところの結論

0
引用返信 編集キー/
■7479 / inTopicNo.3)  Re[2]: 算術演算可能であることを示すinterface
□投稿者/ επιστημη 中佐(217回)-(2006/10/13(Fri) 02:18:58)
επιστημη さんの Web サイト

分類:[.NET 全般] 

No7478に返信(中博俊さんの記事)
> ねっすね。
> ってのが今のところの結論

ねっすかやっぱ orz

わんくまライブラリの下準備にこのテのfunctorをこしらえてていきなりコケたのでし。

比べらぶる:IComparable<T> はあるくせに、ちくしょぉー

# 解決BOX チェックしたくねーけど…


解決済み
引用返信 編集キー/
■7480 / inTopicNo.4)  Re[3]: 算術演算可能であることを示すinterface
□投稿者/ 渋木宏明(ひどり) 一等兵(20回)-(2006/10/13(Fri) 04:47:42)
渋木宏明(ひどり) さんの Web サイト

分類:[.NET 全般] 

> ねっすかやっぱ orz

無いなら作る。
これ、大自然の掟 ;-)


0
引用返信 編集キー/
■7483 / inTopicNo.5)  Re[4]: 算術演算可能であることを示すinterface
□投稿者/ trapemiya 曹長(99回)-(2006/10/13(Fri) 10:54:32)
trapemiya さんの Web サイト

分類:[.NET 全般] 

みんな同じところで悩むんだな〜。

演算にジェネリックが含まれる場合の対処方法
http://blogs.wankuma.com/trapemiya/archive/2006/07/06/31783.aspx

知らぬ間にトラバが付いていて(というか、わんくまブログはトラバの到着がわからない)、なんでできないのかわかりました。ありがとうございます。

0
引用返信 編集キー/
■7489 / inTopicNo.6)  Re[5]: 算術演算可能であることを示すinterface
□投稿者/ επιστημη 中佐(219回)-(2006/10/13(Fri) 14:00:10)

分類:[.NET 全般] 

> 演算にジェネリックが含まれる場合の対処方法
> http://blogs.wankuma.com/trapemiya/archive/2006/07/06/31783.aspx

うーんうーん、かっこイクない…

行列 x ベクトル = 行列 なんてときゃさらにややこしくなる

「Matrix * Vector という演算が定義されており、その結果は Matrix である」

ってゆー制約条件を与えにゃならんで、単に 掛けらぶる<Matrix> じゃダメだしぃ。


0
引用返信 編集キー/
■7491 / inTopicNo.7)  Re[6]: 算術演算可能であることを示すinterface
□投稿者/ 中博俊 神(796回)-(2006/10/13(Fri) 14:02:57)

分類:[.NET 全般] 

>というか、わんくまブログはトラバの到着がわからない
できるようにしたいですね。


0
引用返信 編集キー/
■7494 / inTopicNo.8)  Re[1]: 算術演算可能であることを示すinterface
□投稿者/ NyaRuRu 二等兵(7回)-(2006/10/13(Fri) 16:43:06)

分類:[.NET 全般] 

2006/10/13(Fri) 16:45:49 編集(投稿者)
2006/10/13(Fri) 16:44:45 編集(投稿者)
2006/10/13(Fri) 16:44:03 編集(投稿者)
2006/10/13(Fri) 16:43:53 編集(投稿者)

んー,やっぱり C++ の template と .NET の generics はかなり別物ですよ.
generics には generics なりの良さがあって,その良さを引き出す場面でふさわしい使い方をするのが良いんじゃないかと思います.

たとえるなら,海外旅行中に現地の食材で日本カレー作ろうとして苦労しているように見えるというか.

例えばライブラリのやりとりの手段 1 つとっても,主に include ファイルとしてやりとりされる template library と,.NET アセンブリでやりとりされる generics library では大違いですよね.
C++ template には export があるにしても,コンパイラ依存のオブジェクトファイル/ライブラリファイルなんておいしくないです.

他にも template というとコンパイル時の静的処理という印象が強いですが,generics は reflection と組み合わせた実行時の動的処理や動的コード生成と相性がよいという印象があります.

http://d.hatena.ne.jp/NyaRuRu/20060731#p1
http://d.hatena.ne.jp/NyaRuRu/20060802#p1

また,C++ だと,「コンパイル時計算」→「大域的最適化 / Inline 処理」→「速い」という雰囲気がありますが,CLR 上での実行では,
「値型に interface を実装させる」→「かなり重い」だったり,
「Lightweight Code Gen (LCG) による実行時コード生成」→「JIT が効くのでそこそこ速い」だったりと,なんだか割と世界観が違います.

IronPython なんかは,この LCG を使ってコードを「実行時コンパイル」することで,パフォーマンスを稼いでいると言われていますね.

とまあまずは,.NET / CLR の世界で何が便利なのか (どんな食材が手にはいるのか) を俯瞰した上で,どんな料理を作るか決めていくと良いんじゃないでしょうかね.

例えば今遊ぶなら,Expression Tree と LISP / Scheme 処理系のコラボレーションとかおもしろいんじゃないでしょうかね.


0
引用返信 編集キー/
■7495 / inTopicNo.9)  Re[2]: 算術演算可能であることを示すinterface
□投稿者/ επιστημη 大佐(221回)-(2006/10/13(Fri) 17:07:42)

分類:[.NET 全般] 

> んー,やっぱり C++ の template と .NET の generics はかなり別物ですよ.

似て非なるもんですわねー。
見た目そっくりだからってやれることもそっくりではない、と。

おなじ印象がそのまんまJava-geneicsにもあるわけでして(当然だども)。

いましがた Orcas Sep2006 CTP 落っことしてきてSTL/CLR(旧STL/.NET)を
ほんのちょっと触ってみた…ふふふ。

このネタは明日の東京勉強会で。と、さりげなく(あるいは露骨に)勧誘。
# 滑り込み登録、ぎりちょんで間に合うらしいぞっ


0
引用返信 編集キー/
■7498 / inTopicNo.10)  Re[3]: 算術演算可能であることを示すinterface
□投稿者/ 中博俊 神(797回)-(2006/10/13(Fri) 21:59:20)

分類:[.NET 全般] 

ま、ぶっちゃけると登録していなくても入れるわけですが(^^;;;

0
引用返信 編集キー/
■7499 / inTopicNo.11)  Re[4]: 算術演算可能であることを示すinterface
□投稿者/ Kazuki 二等兵(1回)-(2006/10/13(Fri) 22:29:25)

分類:[.NET 全般] 

No7498に返信(中博俊さんの記事)
> ま、ぶっちゃけると登録していなくても入れるわけですが(^^;;;
まじですか!?

0
引用返信 編集キー/
■7500 / inTopicNo.12)  Re[5]: 算術演算可能であることを示すinterface
□投稿者/ επιστημη 大佐(222回)-(2006/10/13(Fri) 22:43:12)
επιστημη さんの Web サイト

分類:[.NET 全般] 

>>ま、ぶっちゃけると登録していなくても入れるわけですが(^^;;;
> まじですか!?

わんくまの中のひとが言うてんならまじっしょ♪


0
引用返信 編集キー/
■7506 / inTopicNo.13)  Re[4]: 算術演算可能であることを示すinterface
□投稿者/ 渋木宏明(ひどり) 一等兵(21回)-(2006/10/14(Sat) 09:26:18)
渋木宏明(ひどり) さんの Web サイト

分類:[.NET 全般] 

> ま、ぶっちゃけると登録していなくても入れるわけですが(^^;;;

X01HT 持っていったら入れてくれマス?w

0
引用返信 編集キー/
■7509 / inTopicNo.14)  Re[5]: 算術演算可能であることを示すinterface
□投稿者/ 中博俊 神(799回)-(2006/10/14(Sat) 14:19:01)

分類:[.NET 全般] 

現地です。(^^
ひどりさんいないじゃいですか。


0
引用返信 編集キー/
■7510 / inTopicNo.15)  Re[6]: 算術演算可能であることを示すinterface
□投稿者/ 渋木宏明(ひどり) 一等兵(22回)-(2006/10/14(Sat) 15:18:13)
渋木宏明(ひどり) さんの Web サイト

分類:[.NET 全般] 

> ひどりさんいないじゃいですか。

X01HT ゲトするのに4時間も待たされました。。。 (-o-;)


0
引用返信 編集キー/
■7512 / inTopicNo.16)  Re[3]: 算術演算可能であることを示すinterface
□投稿者/ 渋木宏明(ひどり) 一等兵(23回)-(2006/10/14(Sat) 19:46:14)
渋木宏明(ひどり) さんの Web サイト

分類:[.NET 全般] 

> いましがた Orcas Sep2006 CTP 落っことしてきてSTL/CLR(旧STL/.NET)を
> ほんのちょっと触ってみた…ふふふ。

どーでした?

ブログのコメントでも書きましたが、変なラッパクラスを書くことなく解決したいですよね。
(VEctor, Matrix について触れられてましたが、Complex なんかも)

これはこれで、やっぱり面白いネタだと思えてきたので、来年3月にでも「中の人」に直接ぶつけてみましょう ;-)



0
引用返信 編集キー/
■7514 / inTopicNo.17)  Re[4]: 算術演算可能であることを示すinterface
□投稿者/ επιστημη 大佐(223回)-(2006/10/15(Sun) 00:23:30)
επιστημη さんの Web サイト

分類:[.NET 全般] 

No7512に返信(渋木宏明(ひどり)さんの記事)
>>いましがた Orcas Sep2006 CTP 落っことしてきてSTL/CLR(旧STL/.NET)を
>>ほんのちょっと触ってみた…ふふふ。
>
> どーでした?

ほんのちょっとだけ触ってみますた。

#include <cliext/set>
using namespace System;

int main() {
cliext::set<String^> s;
s.insert(L"hello");
s.insert(L"world");
cliext::set<String^>::iterator it = s.begin();
while ( it != s.end() ) {
Console::WriteLine(*it);
++it;
}
}

おー、まんまSTL。 C++フェチにはたまりましぇん♪


0
引用返信 編集キー/
■7516 / inTopicNo.18)  Re[5]: 算術演算可能であることを示すinterface
□投稿者/ 渋木宏明(ひどり) 一等兵(24回)-(2006/10/15(Sun) 06:41:33)
渋木宏明(ひどり) さんの Web サイト

分類:[.NET 全般] 

> おー、まんまSTL。 C++フェチにはたまりましぇん♪

まんまですね (^^;

#include ってことは、やはり C++/CLI 専用になっちゃってるぽいですね。

要するに、STL の allocator 周りを CLR 向けに整備したもの??

0
引用返信 編集キー/
■7517 / inTopicNo.19)  Re[5]: 算術演算可能であることを示すinterface
□投稿者/ επιστημη 大佐(224回)-(2006/10/15(Sun) 11:10:42)
επιστημη さんの Web サイト

分類:[.NET 全般] 

> #include ってことは、やはり C++/CLI 専用になっちゃってるぽいですね。

ですねー。
genericsで実装してるかと期待したんですけど、templateでした。なので C++/CLI用。

> 要するに、STL の allocator 周りを CLR 向けに整備したもの??

ぶっちゃけ"そのとーり"です。
ちょびっと便利なハック(?)がかましてあって:

// 文字列の長さの和
int sum = 0;
cliext::set<String^>::iterator it = s.begin();
while ( it != s.end() ) {
sum += it->Length; // [*]
++it;
}

[*]ここんとこ、ホントなら (*it)->Length となるはずのとこを
it->Length でアクセスできるようにしてあります。なるほど。


0
引用返信 編集キー/
■7519 / inTopicNo.20)  Re[6]: 算術演算可能であることを示すinterface
 
□投稿者/ 渋木宏明(ひどり) 一等兵(25回)-(2006/10/15(Sun) 13:12:28)
渋木宏明(ひどり) さんの Web サイト

分類:[.NET 全般] 

> genericsで実装してるかと期待したんですけど、templateでした。なので C++/CLI用。

なるほどー、まぁ「STL」が名乗れるくらいの内容を generics で記述するのは無理ぽいですもんね。

これはこれでいーと思うんだけど、他のマネージ言語でももっと「書きたいように書ける」ようになるといいなぁ (^^;


0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -