1read 100read
2012年6月プログラム30: ふらっとVisual C#,C♯,C#(初心者用) Part95 (210) TOP カテ一覧 スレ一覧 2ch元 削除依頼
【思考】オセロのAIを作りたいのだが【難問】 (473)
3Dアルゴリズム全般 (427)
最高にド低脳な発言してください in ム版(XVII) (222)
訃報: C 言語の開発者、デニス・リッチー氏が死去 (559)
Java⇔RDBのMapping-Frameworkを語るスレ Vol.5 (933)
【入門】Common Lisp その9【質問よろず】 (375)

ふらっとVisual C#,C♯,C#(初心者用) Part95


1 :12/06/29 〜 最終レス :12/07/05
このスレッドは
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
関連スレ
ふらっとVisual C#,C♯,C#(初心者用) Part94
http://toro.2ch.net/test/read.cgi/tech/1337661928/
C#, C♯, C#相談室 Part73
http://toro.2ch.net/test/read.cgi/tech/1338512087/

2 :


3 :
リロードが義務化されました
書き込む前にリロードしましょう

4 :
前スレ最後
ジェネリック型パラメータ間に継承関係があっても
ジェネリック型そのものに継承関係は引き継がれない
どうあがいても絶望だよ

5 :
A<T>ってするのは大げさすぎると感じる時は
大体の場合A<T>じゃなくて
必要なとこだけA.Method<T>(T item)的な形にすりゃいい

6 :
なにかやりたいことがあって、質問者のアプローチが間違っているのは分かるが
目的が分からんのでコメントしづらい

7 :
確かにアプローチが間違っているんだろうな。
コンテナクラスだろうが何だろうが、目的が正しければList<A<T>>ってなってる状態に何ら問題はないわけだし。

8 :
ジェネリック型にするのは、そのクラスを汎用化したいからだろ。
で、実際に使うときには T に入れる型は決まってるんだろうから、
A<[そのとき実際に使う型]> を継承したダミーのクラスを使うって手もあるような気がするだが、ダメかね。

9 :
using Hoge = A<Nantoka>とかしたほうが遥かにマシ

10 :
>>8
今回は駄目

11 :
1時間格闘してこうなったw
http://ideone.com/kmDZd

12 :
HttpStatusCode列挙体の中身にステータスコードの数字がないのですが、変換とか出来ませんか?

13 :
intにキャストする

14 :
intにキャストしてみろォォォォォォォォォォォォォォォォォォォォォォォォォォォォォォォォ

15 :
2秒はセーフだよね
リロードしたよ!

16 :
>>15
はいアウトー

17 :
デデーン

18 :
ありがとうございますありがとうございます
助かりました

19 :
>>4
インターフェイス使って in か out つけろ。

20 :
>>前986
用途によるけどこれじゃ駄目なの?
http://ideone.com/R8isn

21 :
ContainerなのにTを受け入れないのが間違いなんだよ

22 :
助かってんのかなこれ

23 :
でも
>このクラスは単なるコンテナなのでTには興味がありません
とあるからList<A>を定義したい非ジェネリッククラスの中では
Aの何かに依存しても、Tに依存する処理は無いということじゃないかな
だとしたらその「Aの何か」は非ジェネリックなinterfaceに括り出せるはず

24 :
だからおbjct

25 :
ほんとにそれでいいような気がする。

26 :
class Container<T> where T : IHoge
{
 public List<T> list = new List<T>();
}
interface IHoge{ ... }
interface IHoge<T> : IHoge
でいいわけ
使用者側はIHoge<T>を渡すから<T>の型情報をとれるし
Containerは<T>に依存しない

27 :
なんかわかりにくい気がするから書きなおすわ
class Container<T> where T : IHoge{ ... }
interface IHoge{ ... }
interface IHoge<T> : IHoge{ ... }
class Hoge<T> : IHoge<T>{ ... }
使用者側
var c = new Container<Hoge<ConcreteClass>>();
このようにすることで、使用者側はConcreteClassの型情報を知ることができ
ContainerはConcreteClassを知らないままでいることが出来る

28 :
ホゲ

29 :
ウヒョー

30 :
そもそも、コンテナクラスが全く以てTに興味のない状態なら、
A<object>で受けても何も問題がない、って意味だと思うんだがね。
状況がさっぱり分からん。

31 :
Nullable<T>のstruct制約が絡んでそうな話ぶりではある
結局class Class1<T> : List<T<object>>{}ってイメージなのかな?

32 :
>>30
A<int>やA<long>のint,longに興味のないんだったら
A<int>とA<object>は互換性が無いから受けられないし
引数をそれにしたら送り側にA<object>を強制することになる

33 :
objectが出てくるのは手抜きをしたから
手抜きしてもいいケースも多いけど

34 :
前スレの質問者です。しつこくてすみません。整理すると
class A<T> where T : struct の時に
Bのメンバー変数として List<A<ValueTpe>> を持ちたいということです。
これはBはTに興味がなくBまでジェネリッククラスにしたくないからです
Tのクラス制約の時は全てのクラスの基底クラスとしてObjectが使えますが、
構造体制約の時は全てのクラスの基底クラスとしてValueTypeが(試した限り)使えない
ではどうすればいいかという疑問です

35 :
ちなみに実際のクラス名はこうなります
class KeyframeSequence<T> where T : struct {
class AnimationTrack<T> where T : struct {
class AnimationClip {  <--- これはジェネリックにしたくない!!
 List<AnimationTrack<ValueType> tracks;  <--- これはエラー!!
Tはfloat, int, etcとユーザー定義の任意の構造体です(Vector2, Vector3など)

36 :
>>34
そんで >>11 >>20 >>26-27 >>30 あたりの案についてはどうなの?

37 :
・struct制約を外す(インターフェイス制約にする)
・上二つを変更不可にする
・Tをout Tに変える
・ValueTypeをobject/インターフェイスにする
こういう方法も

38 :
ジェネリックにしたくないっていうのは無理だから
AnimationTrackをジェネリックにするのをやめるかジェネリックにするかだな

39 :
>>35
interface IAnimationTrack {
  void Start();
}
class AnimationTrack<T> : IAnimationTrack where T : struct {
  public void Start(){}
}
class AnimationClip {
  List<IAnimationTrack> tracks;
  public void Add(IAnimationTrack t) { tracks.Add(t); }
  public void Start(){ foreach(IAnimationTrack t in tracks){t.Start();} }
}
class Program {
  static void Main(string[] args) {
    AnimationClip c = new AnimationClip();
    c.Add(new AnimationTrack<int>());
    c.Add(new AnimationTrack<float>());
    c.Start();
  }
}

40 :
struct制約の変更はライブラリの根底に関わるので無理です
上記のコードを参考に考えると、
class A where T : structとい条件下で、
1. List<A<ValueType>> <-- これは無理!
2. List<IA> <-- 共通インターフェース案
3. List<Object> <-- 投げやり案
2.は可能ですができればインターフェースは使いたくない。
3.はいくつかのAに固有な関数が呼べないと困る
と考えると2.が妥当ですかね・・・考え中です

41 :
>>40
2が妥当かどうかは「できればインターフェースは使いたくない」理由によるんじゃね
何故使いたくないの?

42 :
>class A where T : structとい条件下
AnimationTrackにインターフェースを付加するのも無理ならアダプタで
http://ideone.com/IpyhG

43 :
AnimationTrack<T>の<T>が過度の抽象化だからおかしくなってるんだわな
誰も理解できず使えず実装も出来ないライブラリになるのがオチ

44 :
よし理解した!
class A<T> : IA where T : struct で共通インターフェースIAを持たせる。
Tは任意の値型だがIAインターフェースを通す時はfloat(の配列)に昇格する(前スレの人ありがとう!)
これでもうTは伝搬せずジェネリックが連鎖することはない
具体的にはKeyframe<T>で、AnimationTrackはIKeyframeを使うのでもはやジェネリックではない
これがベストだろう。前スレからこのスレまですべての人にありがとうございました。

45 :
なんでキーフレームが任意の値型で実行可能である必要があるんだよバカバカしい

46 :
狂人の考えを理解できるならあなたは狂人だ

47 :
C#でウェブアプリってどうやって作るの?
サーブレットやJSPみたいなのはない?

48 :
ASP.NET

49 :
>>45
ゲームでは普通

50 :
ゲームの話なら
最初からゲ製でやればよかったんや

51 :
なにがゲームでは普通だよw
ゲームどころかライブラリ作れるようなレベルでもないくせに

52 :
ぷっ

53 :
(^m^)ぷぷー

54 :
キーフレームアニメーションには実数の四則演算が必要だと思うが…
ジェネリック型でも動的生成で解決することは出来るけど、そんな知識があればふらっとで質問しないよね

55 :
法線とかカラーなんて32bitもいらんのでbyteやshort型で持つのはよくある事
特にキーフレームアニメーションはデータ量が膨大なので半分にでもなれば万々歳

56 :
KeyframeSequence<T>の型をぼかしてどう計算する気かって話なのですが

57 :
floatでやるに決まってる

58 :
>>57
>>35にVector2を使うって書いてあるが

59 :
MSも同じような設計してるから何とかなるんじゃね
http://msdn.microsoft.com/ja-jp/library/system.windows.media.animation(v=vs.110).aspx
IKeyFrame
├ByteKeyFrame
├Int32KeyFrame
├DoubleKeyFrame
└Vector3DKeyFrame

60 :
>>59
それ、実際にキーフレームアニメーションを行うクラスの方も
ByteAnimationUsingKeyFramesやらDoubleAnimationUsingKeyFramesやら別個に実装されてるから実際あんまり意味ない
ObjectAnimationUsingKeyFramesの離散キーフレームアニメーションに使われてるだけ

61 :
IInterpolationFunction みたいな補完関数を表すオブジェクトを導入するのはよく見かけるな
型に依存した計算はIInterpolationFunction<T>.Interpolate(time : double, initialValue : T) : T に押し付けるのが綺麗じゃね

62 :
BooleanKeyFrameとかあるんだな
何に使うんだこれ

63 :
Opacityを0まで変化させる→Visibleをfalseにしてイベント無効化ってアニメーションはよくある
WPFではないが

64 :
キーフレームのデータが大きくなるから節約したいんでしょ
IKeyFrameとかありえないんじゃないの

65 :
なんで?

66 :
IKeyFrame実装したらオブジェクトになるでしょ
オブジェクトはデータがデカイ
interfaceも実装するとさらに大きくなるし
メンバ関数ポインタ一個一個も重くのしかかるんじゃないの

67 :
最初からclassだよ

68 :
>>66
○○KeyFrameはどれもIKeyFrameを実装してるぞ
IKeyFrame.Valueプロパティの実装は単にbool値をボックス化/ボックス化解除するだけ
というかキーフレームクラスのValueプロパティは依存関係プロパティだから
内部的にはみんなObjectにボックス化して持ってる
WPFはそもそもほとんどのオブジェクトがプロパティを Dictionary<string, object> に似た形で持ってるんだぞw

69 :
WPFの実装じゃなくて>>44の話だよ

70 :
>>66は質問に答えちゃいけないレベルだろ
全部間違ってるぞ

71 :
コピーコスト無視

72 :
値型もインターフェースは実装できる
Int32をよく見ろ

73 :
MSDNにはフィールドの合計が16バイトを越えるならクラスを推奨すると書かれている

74 :
関数ポインタは仮想関数テーブルで実装されているからインスタンスの数だけ存在するわけではない

75 :
違う世界のC#の話っぽいね

76 :
じゃあ残ってるところを・・・。
値型もオブジェクトです。
IKeyFrameを実装したからオブジェクトになるということはありません。
おそらく参照型とオブジェクトを混同していますね?

77 :
そこはO型と読み替えてあげようよ
そんな言葉>>66は知らんだろうが

78 :
この調子でガンガン発言してくださいね
大丈夫、プログラミングは叩かれれば伸びるから

79 :
参照型とオブジェクトを混同していると仮定してもまだなんか変だが…

80 :
問題はそういうことじゃないだろ〜
structにinterfaceを実装したら呼び出すたびにboxingが出てきたりして
メモリを無駄遣いするわオーバーヘッドもすごいわでろくな事にはならん
パフォーマンス的にキツイとこに値型のinterfaceなんて使えないよ

81 :
値型のinterfaceは使えないという前提でobjectになる(もちろん参照型のことね)って言ってたんだけど
素人には難しかったかな〜w

82 :
ジェネリックのwhereでインターフェイスを指定した場合は値型のボックス化は発生しないんだけど
知らなかったの?w

83 :
質問者の言うキーフレームが値型なんて情報はないし、直接話題に出てたWPFのは参照型だけど

84 :
boxingを避けるためにわざわざインターフェースを実装するケースもあるくらいなのに何を言ってんだか
IEqualityComparerなど

85 :
>>80-81
また全部間違ってますけど全部間違えるのがトレンドなの?
わざとやってんの?
わざとやってんなら本気でよ?

86 :
>>82
BOX化せずにinterfaceのメソッドが呼び出せると思ってるんだw
素人はこれだからw

87 :
素人しか言えなくなってきたな

88 :
中学生レベルがっ!

89 :
>>84
Boxingを避けられるのはEqualityComparer<T>.Defaultを使う時だけでしょー
そりゃ避けられるわinterface越しに呼び出してないんだから
>>83
>>34
>class A<T> where T : struct
書いてあるでしょー

90 :
>>84
それは「Equalsの引数がobjectからTに出来る」って話だから関係ない

91 :
http://msdn.microsoft.com/ja-jp/library/system.reflection.emit.opcodes.constrained.aspx
100回読め

92 :
>>89
インターフェイスを実装しろって話になってるのはキーフレームのコレクション
Tはキーフレームのプロパティの型
>>64で言及してんのはキーフレーム自体

93 :
3回読んで理解できない奴に100回読ませても無駄無駄ァ!

94 :
>thisType が値型であり、thisType が method を実装する場合、ptr は call への 'this' ポインターとして未変更のまま、
> thisType による method の実装のため、method 命令に渡されます。
読めってこの部分?

95 :
>>92
>>40
>2. List<IA> <-- 共通インターフェース案
これでしょー
どうみてもListの引数をinterfaceにしてるじゃん
全部ボクシングされるよstructだったら

96 :
だから
MyGenericList<A> where A : IA
にしろってころだろ

97 :
はい論破

98 :
>>95
>>35

99 :
長々と何勘違いさらし続けてんだコイツは
いい加減に引っ込め馬鹿

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
最も美しいプログラミング言語は? Part6 (328)
【超高速】C/C++に代わる低級言語を開発したい 7 (969)
画像処理 その13 (649)
【bzr】Bazaarでバージョン管理 Rev 3 (904)
おまいら最強のシストレFXプログラムをしてみろよ (391)
Ruby 初心者スレッド Part 49 (790)
--log9.info------------------
Tama16「プロデュースはじめました」 (591)
さかいゆう 2スレ目 (814)
高橋徹也 その6 (310)
FAKE? その18 (911)
【BIG】田原俊彦【トシチャソ】 (234)
九州男 (667)
【DIAMOND】ダイアモンド☆ユカイ【YUKAI】 (222)
所ジョージはシンガーソングライター (468)
【Zepp】ハナレグミ【大阪】 (275)
【Kiyoshi】清 竜人 Part 3【Ryujin】 (314)
椎名慶治(ex.SURFACE) part1 (961)
【横山輝一】 Part3 (507)
【未来】KIYOSHI【Angel of mine】 (242)
☆ KATSUMI ☆ (678)
■■■ ENDS 遠藤遼一 part16 ■■■ (314)
【ギターを抱えて】杉山清貴2【弾けるおじさま】 (370)
--log55.com------------------
【PC】企業の半数近くがまだ「Windows 7」を利用--サポート終了は2020年1月
【経済指標】米国のすしインフレ率、人口急増で上昇傾向−ヒューストンなど【スシノミクス指数】
【賽銭】スマホさい銭「全く受け入れられず」 導入した寺では
【104円台突入】処方箋なき円高 金融緩和に限界
【海外移住】「住みたい国」13年連続1位のマレーシア! お試し移住で判明した8つの理由
【輸出管理】フッ化水素輸出、初めて許可 日本、サムスン電子向け
【経済】首相、1人あたり国民総所得「10年後に150万円増やす」
【地域】大阪の復権「東京一極集中に対抗していくんや」