[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 03/27 07:18 / Filesize : 229 KB / Number-of Response : 925
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part52



1 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 10:15:52 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part51
pc12.2ch.net/test/read.cgi/tech/1233757615/

Visual C# 2008 Express Edition 日本語版
www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

その他テンプレ>>2-5くらい

571 名前:デフォルトの名無しさん [2009/05/30(土) 22:39:22 ]
個人的にはもう少し型を意識したJavaScriptのような言語がはやって欲しいな。

572 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 22:43:12 ]
>>571
JavaScriptは十分はやってるだろ

573 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 22:47:18 ]
PowerShellいいぞ。PowerGUIのコード補完との相性もかなり良好。

$a = [xml]"<data>foo</data>"

$a.

で候補にdataが出てくるんだぜ。
ソースコードじゃなくプロンプトで実行しながらじゃないと駄目だけど。

574 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:02:46 ]
「C# .NETアプリケーション開発 徹底攻略 C# 3.0/.NET Framework 3.5対応」
という本で、FormのLoadイベントはコンストラクタ完了よりも先に実行される(ことがある?)
とか書かれてるんだけどほんとにあるの?

どうもこの本思い込みで書いてるような部分も見られてちと怪しんだが…

575 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:31:51 ]
InitializeComponents で子コントロールにプロパティを設定する際に、子から
親フォームが呼ばれてLoadされることが危惧されている。

576 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:38:37 ]
そのフレームワークいいのかな
設計が甘いのでは?

577 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:44:14 ]
甘いねぇ。

578 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:47:51 ]
>子から親フォームが呼ばれてLoadされる
ってどういう状態かわからん…

579 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:49:48 ]
んーマルチスレッドと例外絡みのこと書いてあるとこもでたらめだしなー




580 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:51:20 ]
ちゃんと引用したらいいと思うよ

581 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:11:54 ]
>>574
うろ覚えだけど、
Win32だと、CreateWindow()内で、WM_CREATEを直接呼び出してたような気がする
(CreateWindow()の復帰値はWM_CREATEの復帰値に依存する)

なので、
- C#のFormのコンストラクタ内で内部的にCreateWindowの呼び出しを行う
- FormのLoadはWM_CREATEに相当する
の2つの条件が成り立てば
>FormのLoadイベントはコンストラクタ完了よりも先に実行される
は、成り立つかもしれない

582 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:19:12 ]
子が初期化待たないで親を Visible = true したら起きた。
でも、普通しねえよなぁ、こんなことwww

583 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:19:31 ]
>>581
そんなこと考えるまでもなくマネージドだけで成立するよ、意味があるかどうかは別として
public class Form1 : Form {
    public FFFF() {
        Ctrl ctrl = new Ctrl();
        this.Controls.Add(ctrl);
        ctrl.Do();
        Debug.WriteLine("Ctor");
    }
    protected override void OnLoad(EventArgs e) {
        Debug.WriteLine("OnLoad");
        base.OnLoad(e);
    }
}
public class Ctrl : Control {
    public void Do() {
        Form form = this.FindForm();
        if (form != null) form.Show();
    }
}
相互参照はやっかいだね

584 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:22:05 ]
namespace WindowsApplication1 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
MessageBox.Show("end of init");
}

private void timer1_Tick(object sender, EventArgs e) {
Visible = true;
}

private void Form1_Load(object sender, EventArgs e) {
MessageBox.Show("Form.Load");
}
}
}
でタイマのintervalは1。

585 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:31:27 ]
その前に


コンストラクタでこんなことしていいんか

586 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:38:47 ]
そもそもそんなこする方がやばいんだから
しないように修正するべきだろう。


587 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:39:33 ]
フォームをNewしたらいきなり表示されるとか、冗談ではないわ。


588 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:46:51 ]
しないように済む方法を指導しないテキストがクズだな。

589 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:46:50 ]
引用した方がいいんだが、何せ立ち読みで読んだだけなんで、すまんね。

しかし、デリゲートの非同期実行でEndInvokeせずに、なんと例外が無視されてしまうのだ!!
みたいなこといって、非同期実行するメソッド内で即座にコントロールにInvokeして、これで例外をとれる
っておまえそれ非同期実行の意味全然ないだろうがよとか、こんなの見るとなんか書いてあることが信用できない。




590 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 01:04:13 ]
あー、エスパーすると、非同期実行すると例外取れないから同期しましょう、
と書いてあるのか?

591 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 01:11:44 ]
そういうこと


592 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 01:17:58 ]
その本でスレッド周りに何書いてあるのか、ちょっと気になってきたww

593 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 01:39:23 ]
意外と好評な書評も。
mag.autumn.org/Content.modf?id=20090526140144

594 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 02:11:24 ]
んー今はどうかわからんけど、
Formは2回以上ShowDialogすると動作保証されない
だった気がするけどな。
ナレッジに出てなかったっけな…


595 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 07:20:32 ]
C#で複数接続ができるサーバーを作成しているのですが、多くの接続を受け付けると、
「転送接続からデータを読み取れません: ブロック不可のソケット操作をすぐに完了できませんでした。」
というエラーが出て、例外が発生してしまいます。

誰かこのエラーの解決方法をご存じないでしょうか?
よろしくお願いします。

596 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 07:30:32 ]
XPのコネクション制限に引っ掛かってるとか。

597 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 07:48:28 ]
>>596
XPのコネクション制限には引っかからない程度でも発生するんですよね…
# 10本くらいConnectが発生すると5本目くらいからエラーが発生→例外→…という感じで

598 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 09:22:23 ]
サーバOSやTCP/IP Pacherとかで制限ない状態で試してみれば?

599 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 09:51:46 ]
その前にプログラムを



600 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 13:22:18 ]
自分以外のコネクションが5〜6個あるんでしょ?

601 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 14:13:55 ]
VistaSP2と2008サーバでは撤廃されたっていうからXPでもパッチこないかな・・・
いやがらせとして残されたりして。

602 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 14:15:20 ]
>>593
これWM_CREATE代わりなんだ、確かにShowDialogするごとに呼び出されるね、名前が悪いよな。

603 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 12:05:26 ]
C#というか.netで使える
rubyでいうところの,Narray
pythonでいうところのNumPy
のような配列の形で演算してくれるクラスライブラリはありますか?


604 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 12:21:34 ]
>>603
コンセプトがまるで違うけれども、あえて言えばLINQがそのような処理を担当するライブラリと言えるかと思われます。
だけれども、そういう操作そのものを求めるとちょっと、というかまったく違うものかも
やりかたとしては二つのシーケンスを一つのシーケンスにまとめる、そこに select なりで全体に演算を施す、といった具合。

605 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 12:46:05 ]
数値演算ライブラリが欲しいと言ってるのに、linq挙げるってのはないだろw

でも、.NET向けってのは商業ものしか知らんわ。
BLAS系の.NETバインディングは探せばありそうだけど。

606 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 12:53:14 ]
>>603
詳細はまだ調べてないけど、.NET で線形代数を助けてくれるライブラリなら
Math.NET があるみたい。
mathnet.opensourcedotnet.info/

607 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 13:01:57 ]
>>605
そうですか?むしろ汎用度の高いライブラリだと思うんですけどね。
自分は今は線形代数周りは全部LINQで構築してしまいましたけど

608 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 13:04:41 ]
そもそもLINQってのはテクノロジー()笑の名前であって、ライブラリの名前ではないと思うんだが。

609 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 13:04:55 ]
LINQのコンセプト、モナドと抽象線形空間の相性がいいというか……
実数上の線形空間はもちろん、複素数でも有限体でもいけるし、いっそ関数を基底とかも。
まぁなんかそんな感じてす



610 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 13:15:52 ]
LINQは集合演算
mapもあるしリスト演算(コンベア的な)もつかえるし
そういういみじゃん

611 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 13:26:56 ]
LINQtoObjectによる各種演算処理からLINQtoSQL or LINQtoXMLと次々と同一コンセプトでつながっていくのも気持ちいいしね。

612 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 18:04:30 ]
列挙型を含んだクラスをシリアライズしようとすると
例外が発生してしまいます。

↓こんな列挙型です。
  public enum ActionType
  {
    [XmlEnum(Name = "Single")]
    One,
    [XmlEnum(Name = "Double")]
    Two,
    [XmlEnum(Name = "Triple")]
    Three
  }

なにか方法などありますでしょうか?

613 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 18:10:14 ]
例外の詳細ぐらい書けよ

614 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 18:15:12 ]
IXmlSerializableを実装しろ

615 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:20:33 ]
アンマネージコードからコールバックされるマネージコードで例外をアンマネージ側に
漏らしたくない場合は以下のMyCallBackのような処理であってる?


public delegate bool CallBack();

[DllImport("hoge.dll")]
private static extern int Hoge(CallBack callback);

static void MyCallBack()
{
 // このメソッド内で発生した例外を hoge.dll に漏らしたくない
 RuntimeHelpers.PrepareConstrainedRegions();
 try {
  // hoge
 } catch (Exception e)
  Console.WriteLine(e);
 }
}

static void Main()
{
 Hoge(new CallBack(MyCallBack));
}


616 名前:デフォルトの名無しさん [2009/06/01(月) 22:25:23 ]
それはいいけど渡し方がダメ
アンマネージコードに渡したデリゲートはstaticフィールドに入れとかないとGCされて死亡

617 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:25:31 ]
エラー時コールバック(イベント)でも登録できるようにするべきじゃないかな。
常にコンソール出力だけでOKなら別にいいかもだけど。


618 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:29:47 ]
>エラー時コールバック(イベント)でも登録できるようにするべきじゃないかな。
>常にコンソール出力だけでOKなら別にいいかもだけど。

おっと、CERじゃこんなのは無理か。
ってその前にコンソール出力も無理なんじゃないか?


619 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:37:08 ]
なんかイマイチやりたいことが伝わってこない
例外握りつぶしてしまっていいのか



620 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:45:50 ]
>public delegate bool CallBack();

>static void MyCallBack()

>Hoge(new CallBack(MyCallBack));

返り値違うぞ

621 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:07:24 ]
>>616
GCHandleいじるのが作法上正しいのでは

622 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:22:17 ]
>アンマネージコードに渡したデリゲートはstaticフィールドに入れとかないとGCされて死亡

このコードだと問題ないけどね。
もちろんこういう構造じゃない場合は問題あるので考慮は必要。


623 名前:デフォルトの名無しさん [2009/06/01(月) 23:29:05 ]
問題ないかどうかはHogeの中身による
非同期にコールバックされたり戻ったあとも向こうで関数ポインタ保持されたりしたら死ぬ

624 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:59:45 ]
非同期にコールバックする頃にはプログラム終了してるんじゃないかな、この場合

625 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:11:12 ]
この場合ってhogeの中身が何も書いてないんだから
何も判断できない

626 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:31:25 ]
static void Main()
{
 Hoge(new CallBack(MyCallBack));
}

だから後でコールバックされるような使い方じゃないと「想定したら」、だよ。>このコードだと問題ない


627 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 07:29:09 ]
ホゲが何者かわからん状態で
てめー勝手に都合の良い想定をするのは愚の骨頂じゃないか

628 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 09:57:11 ]
未来永劫大丈夫。
PCのメモリも640KBで十分だし。

629 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 11:05:07 ]
別に普通の想定だろ。
まあ別に軽く突っ込んでみただけで、ホントにそれでいいとは思ってないよ。




630 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 11:28:47 ]
>>628
いつまでそんなネタひっぱってんだよ化石

631 名前:デフォルトの名無しさん [2009/06/02(火) 19:10:23 ]
登録しといて後で呼び出してもらう形の方が想定としては一般的だと思うんだが
P/Invokeでは特に

632 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:10:47 ]
未来永劫ひっぱるぜ

633 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:27:06 ]
だから、このコードだと、なんだろ?

634 名前:デフォルトの名無しさん [2009/06/02(火) 19:33:36 ]
Hogeが非同期ならこのコードでも死ぬよ

635 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:44:12 ]
CallBackが引数無い、返り値はbool、例外は関数の外に出したくない
工夫のしようがないよね

hogeのインターフェイスを変更可なら色々出来るが

636 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 22:18:06 ]
>>634
いやまずあり得ないね。
まあ意味ないしどうでもいいけど。


637 名前:デフォルトの名無しさん [2009/06/03(水) 17:19:43 ]
ちょっと相談させて下さい。

ネットワーク経由で送られてくるバイトストリームがあるとして、あるバイト位置まで読み進めないと
どんなフォーマットのパケットが来てるか分からないという形態のプロトコルを処理する場合、C#的には
どう書くとするとスマートなんでしょうか?
結果的には、パケットの種類に応じた構造体として後の処理で使えるようになればいいです。

C言語だと共用体を使うとスッキリ書けますが、C#でFieldOffsetを使うのは何となく邪道な気がします。

638 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 17:46:28 ]
自分なら迷わずFieldOffsetを使うけど、なぜそれが邪道なのかはわからん。

639 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 18:08:37 ]
>>637
何で邪道なんだろ
どうしても嫌ならビットシフトやらこねくり回せば?



640 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 18:15:36 ]
指定位置までMemoryStreamに入れといて
データの種類が判明してから適宜変換して使うとか?

641 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 19:44:55 ]
>>637
バッファと実インスタンスを分けて書くしかないんじゃないかなぁ

642 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 19:45:46 ]
>>637
ある時点でpush backできるストリームを使うか作る

643 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 20:48:33 ]
経験者に聞きたいのですが、C#はC++やCに比べて使いやすいでしょうか?
普及度とか今後を見たときに覚えておくと便利ですか?

644 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 20:51:46 ]
段違いで使いやすい。
今後は、まあ、CやC++は上級者のための代物になりつつあるから
今からC,C++を一からやるよりは良いんじゃないかね。

645 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 21:12:48 ]
C/C++で書く経験自体はしておいた方がいいと思うけど、実用的にはC#のが楽。
まぁ、C#じゃなくてもJavaでもRubyでもErlangでも好きなものを使えばいいと思うが。

646 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 21:17:40 ]
レスありがとうございます。
C#は確かに使いやすくなっているようなイメージがあるのですが
CやC++でしかできなくて、C#じゃできない事ってあるんですか?


647 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 21:22:53 ]
大きく見ればデバイスドライバとかシステムフックとかぐらいか

648 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 21:39:34 ]
>>646
.NET言語だから移植性に難

649 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 22:03:33 ]
cしらないとdllimportかけないじゃん



650 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 22:08:27 ]
全部やっといた方がいい

651 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:02:14 ]
>>646
OS関係の高度な操作とかは、C#では茨の道かも。
特定のCPUに特化したプログラムの作成とかも難しい感じ。

652 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:42:57 ]
そういう、プリミティブなことをするか、組み込みなどで選択肢が少ないこと、よほどの高速性(これもものによっては関数型のほうが速い場合もあるが)でなければ生産性などなど考えたらC++というのは選択肢にはあがらんなぁ・・・
昔C++で今はC#メインだが、コンパイル速度が激速な点が一番うれしい。

653 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:53:16 ]
Windows上で動く普通のアプリを作るだけなら
C#だけで充分だね。

654 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 06:39:10 ]
C#がここまで評価される言語になると誰が予想しただろう

655 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 08:06:22 ]
そりゃ、C# でググって出てくる上位サイトは
たいてい1.0とかそれのCTPの頃からC#の記事書いてるし、
その人らは予想してただろ。

656 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 08:08:06 ]
.NET 1.0の頃は見向きもせずC++使ってた。
.NET 2.0とVS2005が出た時に、熱心に布教してたMS見て試しに使ってみたら意外と良くて、そこから徐々に乗り換えた。

>>654
VistaがまだLonghornと呼ばれていた頃
Win32を置き換える!とか言って浮き足立ってたなぁ

>Longhorn登場時期と予想されている2006年、PCは4〜6GHz/2コアのCPUを搭載し、メモリ2Gバイト超、HDD1Tバイト超
2003年の記事眺めてて噴いたw 今だからこそ言える。ねーよwww

657 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 11:41:06 ]
>>652
>昔C++で今はC#メインだが、コンパイル速度が激速な点が一番うれしい。
C#が速いというよりもC++が致命的に遅いというのが実態な気がする。
いずれにしても、ある程度の規模を超えたらC++のコンパイル時間・リンク時間は実用的でないです
特にリンクが遅いのが余りに致命的

658 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 11:47:56 ]
>>656
Core2辺りで一応達成といえるんじゃないかな、Pen4と同クロック比較で2倍程度(当時のCPUの想定はPen4クラスだと思われる)
メモリは一応2Gにはなった、HDD1Tバイト超だけが実現されていないかと
しかし、必要ない人には今の時点でもHDDは余っているだろうね

659 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 14:18:04 ]
>>657
ヘッダ書き換えた時のコストがあまりにもひどいと思うよ。



660 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 14:20:34 ]
>>659
それに関しては、分散コンパイルを使えば……、あんまり解決してないけど一応解決する
けれどもリンクはもう完全にお手上げ

661 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 14:27:54 ]
今や、マネージコードで書かれたFPSなんかが出てきても、驚くほどのことじゃないな。

662 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 15:06:12 ]
FPSって何?

663 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 15:08:35 ]
ファーストパーソンシューティング
ゲームの一ジャンル。欧米で今一番はやってる形態

664 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 15:12:38 ]
ファーストパーソンズシュータアァー!

665 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 17:06:53 ]
空気よまずに、、、

フレーム・パー・セコンド

666 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 17:52:15 ]
そういや、Silverlight3で書かれたFPSのデモがあったな
普通に3Dの画面がサクサク動いてて驚いた

667 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 18:33:59 ]
>>666
これ?
www.innoveware.com/quakelight.html

668 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 18:55:11 ]
>>659
そういうコストを減らすために
ヘッダの依存を分散させる設計が必要
そのコストが高いってことは設計が悪いってことだ
ヘッダのあるプログラミング言語的には

669 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 19:14:07 ]
template…



670 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 21:22:45 ]
>>668
それが最近の統計情報によると、ヘッダの重複コンパイルがコンパイル時間の8割がたを占めていて
ぶっちゃけヘッダ別けファイル別けするよりも、全ヘッダ・ソースを一つに結合してコンパイルしたほうがマシって状況にあるらしい。
さらに、リンクファイルに無闇に外部参照ラベルが出現している上、それがCからの名残でツリー構造ではなく名前空間にヘッダやらフッタやら特殊規則の名前やらが無節操にぶちまけられてまともに検索もできない有様。
古すぎるんだ、技術的に……

昔はこれでよかったんだよ、むしろこうする事により高速なコンパイルが期待できたんだ、だけどこの方法は数が増えるとコンパイル時間が爆発的に増えるんだ。
ちょっともうスレとは関係なさすぎますね、自粛します。

671 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 21:55:00 ]
倍々ゲームでコンパイル時間が増えていたが、それでもコンピュータのパフォーマンスも倍々ゲームで増えていたので
しばらくは問題にならなかったんだな、しかしDiskIOその他は倍々ゲームパフォーマンスアップはしなかったので次第に問題が表面化してきたと。

672 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 23:53:55 ]
>>670
ヘッダに全部コードを書いて、ソースはそいつをインクルードしてるだけってソフトがあったんだが、
それが理由なのか。

673 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 00:56:58 ]
それはアレやないすかね、テンプレートの扱いがややこしいので
割り切って全部ヘッダにしただけやないですかね。

C++ は重複の多さもあるけど、コンパイル時に色々やりすぎって
話もあるんではなかろうか。

674 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 01:45:06 ]
ひとまとめにしたほうがコンパイラも最適化を聞かせやすい品。
SQLiteがやってる。

675 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 02:10:54 ]
.NetFrameworkのJITってSIMDを使わないんですか?
使う事があるのはmonoだけですか?

676 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 02:48:54 ]
せいぜいmovqくらいじゃね

677 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 02:58:36 ]
>>673
C++のコンパイル速度の遅さは文法の複雑さが主な原因。

678 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 03:10:57 ]
>>674
VC++はリンク時の最適化というのがあって、
それ使えば全部ひとまとめにしたのと同じような効果が得られる。
まあこれ使うとさらにリンク時間が長くなるんだが。

679 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 03:47:29 ]
>>675
SIMDが使える環境では使うようにJITコンパイルされる。
Mono.SIMDはSIMDによる"手動の最適化"を"マネージコードだけ"で行えるのが武器。
.NETでやるには部分的にC++/CLIを用いてネイティブで実装する必要がある。



680 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 03:53:06 ]
むしろC#のコンパイル速度が速すぎる。
入力中にバックグラウンドでコンパイルしてるんじゃないかと疑ってしまったぞ。

681 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 07:14:37 ]
>>680
VBにしてもJavaにしてもこんなもんじゃね?
デルファイとかさらに早いし

>>677
無意味なコンパイルだと思われる、一度コンパイルし結果が得られるはずであっても、直前のヘッダファイルが変更されると
全部コンパイルし直さない限り、そのままでいいか確定しないからな。
コンパイルの流れがちゃんとすれば、C++よりはるかに複雑な構造は取り扱えるし、C#だって今となってはC++と比較して遜色ないくらい複雑な内容をもっているし。

682 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 07:21:48 ]
>全部コンパイルし直さない限り、そのままでいいか確定しないからな
この原因を作り出しているのがプリプロセッサで、C系のプリプロセッサの仕組みは今となっては非常にマズイという事になっている。
それとincludeされるファイルがincludeし始めると、対象が指数関数的に増えるのも問題。
C#の場合はどんなに複雑でも、各ファイルが独立しているので、コンパイル時間は線形的にしか増えない。今の言語はほとんどこのスタイル。

683 名前:デフォルトの名無しさん [2009/06/05(金) 09:43:48 ]
構文解析やコード生成自体はそんなに大したコストじゃないよ

684 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 11:11:08 ]
>>683
十分デカイって、特に何か処理のする事がない、ただラベルの付け合わせだけのリンクでさえボロボロのC++においては

685 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 11:25:48 ]
C言語とオブジェクトファイルをリンクするldの方式は1960年代の技術だからな、C++も基本的にはこの考え方を踏襲しているわけで
かれこれ40年越し、そろそろ半世紀前から使われてきた技術だ、さすがに熟成通り越して酢になってますよ。
今でも実用的に使われているというのはそれだけでも凄い事なんですけどね。

686 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 12:04:10 ]
>>680
実際にバックグラウンドコンパイルを研究する価値はあるんじゃないか?w
というか、きっと誰かしてる。

687 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 13:55:37 ]
たしかにコーディング中の入力待ちアイドルタイムって長いもんな

688 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 15:35:15 ]
これからのC++ではC#やVBがIntelliSenseを使うための情報収集をする時間でコンパイルか……
追い詰まっていると思われ

689 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 19:08:53 ]
>>686
ていうか書いた奴が
インテリセンスで即反映、コードチェックも即掛かる
なんだからバックグラウンドってーか入力がある度にやってるんじゃないか



690 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 20:20:30 ]
C++も使うが、Visual Studio 2010はびっくりするほどIntelliSenseが効くようになったのが凄い。
ブログでも今までのを捨てて新しくしたと言っていたし。
まあそれでもC#には敵わないが。

691 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 21:33:22 ]
個人的にはできる限り早い段階でC++よりC#へ移行させてほしいと願うばかり
さすがにもうC++ではやりきれない

692 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 09:41:03 ]
C#で十分にできることを、C++でやってるんだとしたら、
それは悲しいことだな

693 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 10:08:20 ]
激しく計算するような分野じゃC#は使えないよ

694 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 10:44:08 ]
GUIと通信部分をC#で書いて、計算はworkstationでやってるけど?

695 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 10:47:45 ]
いいんじゃない

696 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 11:18:04 ]
だから向き不向きあるゆーとろーが
向いてるところに生産性の悪いC++使うことないともゆーとろーが

697 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:28:22 ]
激しく計算するような分野だが、C#に変えちまったけどな
C++でスレッド管理めんどくさすぎ、やってられない
結局やりきれずにシングルスレッドで書いてC#より遅くて使い物にならん事多々あり

698 名前:デフォルトの名無しさん [2009/06/07(日) 13:29:49 ]
いまならC++を使う状況はメモリを直接参照して変更するような処理かな?
いまならC++/CLIつかってその部分だけ書くのが便利かもと思ってる。

C#でちょっとした画像処理をポインタを使用して書いた時は、
unsafeがいちいちめんどくさくてストレスがたまったよ。

699 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:34:34 ]
C#のunsafeでだるいならC++でもだるいだろう。
ちょっとコード書き足すだけだし



700 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:35:43 ]
C++スレで存分に語れよ

701 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:36:11 ]
C++のほうもOpenMPはだいぶ楽だと思う。
C#にもあれくらい簡単に使えるのが欲しい。
というわけで、.NET 4.0の並列化関係のライブラリに期待している。

702 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:37:34 ]
OpenMPは総合力に掛ける、使いどころが限定的すぎる。

703 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:43:00 ]
そんな最強言語決定戦みたいなのは厨二に任せて、
寛容なC#ユーザーはC++を使う人を一々否定しないって顔しとけよ

704 名前:デフォルトの名無しさん [2009/06/07(日) 13:43:16 ]
>>699
いや、アンセーフじゃないC++は普通に業務でつかってるかよ。
書くのは全くだるくはないが、ヘッダの依存関係を解決する方が面どくさい。

705 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:44:29 ]
だからC++スレで存分に語れよ


706 名前:デフォルトの名無しさん [2009/06/07(日) 14:15:56 ]
public class DoubleList : List<double>
ってクラスがあって、
コンストラクタが
public DoubleList () { }
こうなってる場合は

みたいなクラスを作った場合には、 new DoubleList()
が呼ばれた時点でList<double>が作られますよね?

ここで Listのコンストラクタのうち、引数としてcapacityをとるものを
DoubleListのコンストラクタとしても用意したいのですが、どうしたらいいでしょうか?

707 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:24:58 ]
public DoubleList(int capacity) : base(capacity) {
}

708 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:25:23 ]
public クラス名() : base(スーパークラスの引数) {}

709 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:29:44 ]
少しエスパーしてみた、本当に欲しいのはこっちか?、ちがってたらまぁ適当にやってくれ。
using DoubleList = List<double>;



710 名前:706 mailto:sage [2009/06/07(日) 14:31:20 ]
>>707,708さん

それです!ありがとうございました。

>>709さん
doubleの可変長配列に各種メソッドの追加、演算子のオーバーロード等がしたくて
DoubleListなんて作ってました。

皆様ありがとうございました。

711 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:39:09 ]
>>710
ならば、定石としてはコンポジションをとるべきである、多態性を目的としない機能追加を伴う導出は悪だ。

712 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:41:54 ]
extention method もあるな

713 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 15:27:51 ]
>>703
C++使う人を否定してるってよりは、
仕事でいやいやC++使ってる自分を否定したいんでは。

714 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 16:17:41 ]
DoubleListだが、こいつはIList<T> に対するアダプターパターンで解決するのが基本かと。
演算子のオーバーロードというのだから、線形代数系の何かだと思われるが。
相手がList<double>限定では汎用度が低すぎるしな、double [] にも適用したいだろう。
特にIList系より抽象度が低くてよいのなら、IEnumerable<T>ベースで作ってやればLINQの恩恵にもあずかれるだろうし。

715 名前:デフォルトの名無しさん [2009/06/07(日) 20:13:25 ]
スレ違いかもしれませんが・・・

VS2008で、#regionで閉じられたソースを一気に全部開きたいのですが、
何かショートカットキーはあるのでしょうか?

716 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 20:31:32 ]
Ctrl+M, M

717 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 20:48:09 ]
>716

ありがとうございます。
CTRL+M系で色々できるんですね。


718 名前:706 mailto:sage [2009/06/07(日) 22:30:26 ]
>>711,712さん

コンポジションって
public class DoubleList{
private List<double> list;
}
ってメンバ変数にしちゃうってことですよね?

その場合ってインデクサとかList<double>のうちすべてを自分でDoubleListに実装するってことですか?

手間ばかりであまりご利益が感じられないのですが。

719 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:56:24 ]
>>718
コンポジションが嫌なら、Collection<double>からの派生にすればいい。
こいつの派生なら許せる。



720 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:10:14 ]
>>718
継承は、依存関係が強くなりすぎるのが嫌われる。
手間はかかるけど、我慢してコンポジションにする人多い。
自分も、手間掛ける時間あるならそうする。

721 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:12:28 ]
コンポジションを作るプログラム書けばいいじゃん、すぐ終わるよ

722 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:47:39 ]
設計屋のオナニーって感じだな
List<double>がダメでCollection<double>は許せるとか
意味不明

723 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 00:19:20 ]
Collectionは中の実装に依存しないから。
実装変えるたびに継承関係が変わったら話にならない。

724 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 00:28:40 ]
>Collectionは中の実装に依存しないから。
中の実装ってどこを指してんの?

725 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 06:41:21 ]
言ってることが滅茶苦茶だな

726 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 07:41:27 ]
>>724
CollectionはList実装であることに依存しない、つー話じゃないの

727 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 09:09:07 ]
>>724
以下のような話はわかる?

・.NET においては List って時点で配列リストの事を指してる
・List を継承するってのは「配列リストで実装します」と宣言するようなもの
・後からアルゴリズム変えたい(連結リストにしたり両端キューにしたり)場合があると困る
・コンポジションで作ってれば後から変えるのも自由


728 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 09:27:33 ]
is-implemented-in-terms-of関係

729 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:32:30 ]
グダグタ言わずにインターフェイスは多重継承可、クラスの継承はまずしなくても十分に汎用性が取れないか検討してから
クラスの継承は多態性が必要になった時に使う、しかし可能な限りインターフェイス継承。
100の屁理屈より100の実践、守ってやっていれば、なぜそうすることが良いか自然に分かる。



730 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:46:19 ]
>>718
public class DoubleList : IList<double> {
private List<double> list;
}
こうすべきだな、他に必要なインターフェイスがあるならそれも加えておく。
最新のVS2008ならIList<double>と書けば、此処をクリックしろとマークがでるので、それをクリックして必要なスタブを全部生成すると便利だ。
こうやってList<double>の『実装に依存』させるのではなく、List<double>の『インターフェイスに依存』させるのだ。

731 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:00:53 ]
「インターフェースの明示的な実装」
すげー、こんなのあったのか

732 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:08:45 ]
結局のところ継承ってのは既に完成しているクラスを改造する行為で、コンポジションとインターフェイスにすると言う事は、
既に完成しているクラスをそのまま利用しつつ、共通項目を共通した方法で取り扱えるようにするという事。
改造する行為はバグを誘発しやすいんだな、なにしろ作った本人どういう手順で改造して欲しいまではあまりドキュメンテーションしないししきれないからね。
ブラックボックスをこじ開けるような行為はしない方が良いのです。

733 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 16:04:05 ]
>>730
(スコア:5, 参考になる)

734 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 17:49:24 ]
こういう初歩的なのはMSDNで3分でわかる○○等でやっているから見ておくといい
設計方法としてもオブジェクト指向の初歩なので、こういうのを知らなかったなら、一度一からオブジェクト指向を勉強するのがいい。
導出が分かればオブジェクト指向などというメチャクチャなのが時折いるが、あなんのは絶対に駄目だからな。

735 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:04:24 ]
なにいってんだかわかんねw

736 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:24:45 ]
>>726-727
少なくとも
System.Collections.ObjectModel.Collection<T>
はIListを実装した配列リストなんだが
Collectionも配列リストだ

クラスとインターフェイスと一般的な概念をぐちゃぐちゃにして話してないか?
インターフェイスはIをつける
一般的な概念はそれとわかるような文脈で書いてくれ
頼むから

737 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:28:10 ]
とりあえず大元の質問者がList<double>から継承するっていうんなら、
Listにしかないメソッドを使いたいとかいうのもあるんじゃないか
Find系とか。doubleだしな
なんで>>730みたいにIListで十分と思えるのかがわからん
もしかしてIListはListの公開メソッド/プロパティ全部カバーしてると思ってる?

>>734
まったくだな
MSDNも見ずに一般論だけで偉そうに講釈垂れるのは
ハタ迷惑なアホだな

738 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:31:49 ]
>>737
>Listにしかないメソッドを使いたいとかいうのもあるんじゃないか
それは完全に間違っているような気が……

>もしかしてIListはListの公開メソッド/プロパティ全部カバーしてると思ってる?
そういう問題ではないだろうという気が……

危険だ


739 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:33:27 ]
>>737
「List<T>にしか無いメソッド」も実装すればいいじゃない



740 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:33:47 ]
深いオブジェクト指向の知識など要らないとは思うけれど、必要最低限の知識はもっていてもらいたいものです……

741 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:38:42 ]
MSDNは短い割にはポイント絞った良いセミナーやるからな、見ておいて損は無いよ。
特にビデオ物、流してみておくだけでも思わぬ拾い物が多い。

742 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:43:21 ]
そういやjavaとか
StackがVectorから派生してるとかいうバカ設計なんだよなw
Stackなのにランダムアクセスできるwww

743 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:51:36 ]
>>742
処理系によるけど、コールスタックに積んだ引数とか、
普通にSP使ってランダムアクセスする場合の方が多い気がするのだが。
べつに、スタックだからって必ずいちいちpopしなきゃダメってこたないよ。

744 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:55:24 ]
>>743
一般的なスタックの概念から外れてるんじゃないかい?
>>727みたいな話になるけども

745 名前:デフォルトの名無しさん [2009/06/08(月) 19:02:05 ]
>>743
それならStackなんていらない
リストで代用できるしその方が速い

746 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:03:38 ]
>>736
あー、そうだった。

でもまぁ、この話って、インターフェースプログラミングのお作法以前の話として、
C#のコレクションの分類に一貫性がないというか滅茶苦茶なのが一番の癌なんじゃないかなぁ。

IListってのがあったら、普通Listはその直系の具象実装だと思うわなぁ。

747 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:04:26 ]
明示的にスタックとしているのにインデクサでアクセスされたらたまらんな。
おお怖い。

748 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:06:01 ]
まずいとおもったから作りなおしたんでしょ。1.2だかで

749 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:06:18 ]
>>746
まあね



750 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:08:38 ]
>>744
コールスタックって、スタックの第一級の応用例じゃないのかね。

>>745
適当だけど、

int sp = 0;
int[] stack = new int[100];
void push(int i) { stack[sp++]; }
int pop() { return stack[sp--]; }

みたいなノリの実装だったら、少なくともpush(), pop()はlistより高速なんでないかね。
ランダムアクセスのオーダーもListと等価になるし、特にListのが優位な点も見当たらないが。

751 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:09:08 ]
C#のコレクションはLINQと相まって、もういっぺん見直した方がいいとは思う
上のFindの話もそうなんだけど、ああいうメソッドがコレクションについているべきではないと思われるし。

752 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:11:37 ]
Find系は以前からあるから、新加入のLINQと役割的に競合してるわけね

753 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:13:10 ]
一発で決まる綺麗な実装は難しいね、LINQの汎用性ときたら半端じゃない。

754 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:13:11 ]
>>750
そのへんは相当シビアな速度求められるところだから
[]演算子で先頭アドレス基準にアドレス計算しなおすだけで
ふざけんなって言われるよ

755 名前:デフォルトの名無しさん [2009/06/08(月) 19:14:14 ]
SilverlightではLINQと被ってるのはごっそり削られました

756 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:15:35 ]
>>754
JavaやC#といった言語はオプティマイズ問題とインターフェイスの問題はきれいに切り分けられるように工夫された言語なんだから、ごっちゃにするなよ。

757 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:17:43 ]
>>756
コールスタックの話題だろ?
>>750が持ち出してるのは

758 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:19:01 ]
>>754
C/C++で組み込みのリアルタイムシステムを書いてるならともかく、
JavaとかC#で、そのレベルのチューニングを要求するのはナンセンスな気がするのだが。
そもそも、中間言語レベルでも整数のインクリメントなんて1opじゃないのかね。

759 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:20:56 ]
>>757
で、コールスタックになったら問題が何か変わるわけ?
スタックフレームの知識はあるよ、アセンブラやってたから、心配せずに言ってみな。



760 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:22:56 ]
>>757
ん?
Stackでランダムアクセスをしちゃいけない理由ってのがあるか否かって話じゃないの?

ちなみに、CPUレベルの話なら、pushとpopはほぼノーコストでしょ。
JavaやC#の話をしてるなら>>758

761 名前:デフォルトの名無しさん [2009/06/08(月) 19:25:50 ]
だからランダムアクセスできたら何のためにリストとは別にスタックがあるのかわからなくなるだろ

762 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:31:02 ]
>>761
push()とpop()とpeek()が使える、Listの特殊な場合がStack、って分類なだけでしょ。
実装的にもアルゴリズムのオーダー的にも差異はほぼ無いわけだし。

アセンブラレベルでpushとpopを特別扱いしてるのは、詳しくは知らないけど、
それこそコールスタックで使うとか歴史的理由とかその辺じゃないの?

763 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:32:06 ]
>>762
差異がないってw

764 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:37:16 ]
>>762
あんま関係ないけど、呼び出しスタックはダイクストラという偉い人がスタックはハードウェア化すべきだとのたまわったので、以後のCPUでは多く採用された。
構造化プログラミングの提唱者の人ね、その後RISCという方法が主流になって再び捨てられた。
歴史的にはそんな感じ

765 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:38:13 ]
>>763
実際、Javaではそのように扱っていて、特に問題は起きてないわけだが。

逆に、「ランダムアクセスができるものはスタックとは呼ばない」という定義が
一般的だと主張するなら、それを示してくれ。
「○○という計算機科学の教科書に書いてあった」とかそういうのでもいいよ。

766 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:39:15 ]
>>764
そーか、それは知らなかった。勉強になったよサンクス。

767 名前:デフォルトの名無しさん [2009/06/08(月) 19:40:24 ]
だから.NETのStackではあえて差異をつけてるんだろ
同じなら二つもいらない

768 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:41:44 ]
>>765
無意味なところに話を持っていくなぁ

769 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:53:06 ]
Stackでランダムアクセスができるのはおかしい
というのに異論がある人がいるとは思わなかったじぇ。



770 名前:デフォルトの名無しさん [2009/06/08(月) 19:57:24 ]
できたら意味がない
というだけのことなのに…

771 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:01:45 ]
>>769-770
じゃあ、コールスタックはおかしくないのか、というところに話が戻るわけだが。

772 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:08:31 ]
IListインターフェイス付きのコレクションと、そうでないコレクションは実装は同じでも設計レベルでは分けて考えろという事。
実装からインターフェイスを分離独立せよ、これがわからんやつはプログラマ廃業したほうがいい。

773 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:21:28 ]
0xcc.net/blog/archives/000043.html

他の言語でも、むしろ配列の操作の一部としてpush(), pop()がついてるのが普通みたいだね。

774 名前:デフォルトの名無しさん [2009/06/08(月) 20:22:57 ]
Visual C# 2008 EEで開発しています。

以前C++で書いた関数を利用するにはどうすればいいですか?


775 名前:デフォルトの名無しさん [2009/06/08(月) 20:23:42 ]
書き直しましょう

776 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:26:31 ]
>>773
そんな結論になるおまえにびっくりだ

777 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:29:08 ]
>>765
Introduction to algorithms
Stacks

The order in which plates are popped from the stack is the reverse of the order in which they were pushed onto the stack,
since only the top plate is accessible.

778 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:29:12 ]
>>774
今すぐネットを切断するんだ、そして冷水を浴びろ、それで利用方法を思いつけるはずだ。

779 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:30:16 ]
>>776
C#みたいに、配列とスタックを全く違うものとして扱う言語の方が特殊なんじゃないの。
多くの言語では、スタック操作は配列が提供する機能の一部として扱っているようだが。



780 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:32:22 ]
>>779
まさか、サイズ不定の場合はリンクリストにするのが普通だろ、こんなの常識

781 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:34:54 ]
俺アセンブラはMIPSアセンブラしか知らないけど
スタックポインタでランダムアクセスっぽくしてるのは
ランダムアクセスというよりPeekの操作に該当するんじゃないかな

782 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:36:10 ]
>>781
おまえさんは抽象的に考えるということを一度勉強すべきだな

783 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:38:18 ]
2010年に.NET2.0SDKに置き換わるものが出るの?

784 名前:デフォルトの名無しさん [2009/06/08(月) 20:39:46 ]
>>781
こんなところでグダまいてないでさっさとゲーム作れw

785 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:42:33 ]
>>777
俺も真っ先にブックサーチでそれを探したけど、
「(カフェテリアで使っているばね式なお皿のスタックは)一番上のお皿のみが
アクセス可能なので、スタックにpushしたお皿は逆順でpopしてくる」としか書いてないよね?
どこにも、「スタックから一番上以外のお皿を取り出してはいけない」とは書かれていないと思うのだけれど。

>>780
なんで突然Linked Listの話が出てくるのか分からないんだけど、
一応聞いておくけど、Linked Listをランダムアクセスしたときの計算量は?

786 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:43:02 ]
>>783
SDKなら.NET3.5用のがすでにあるが、一体何を言いたいんだ?

787 名前:デフォルトの名無しさん [2009/06/08(月) 20:45:53 ]
>>785
お前プログラマやめた方がいいと思うよ、マジで、才能ないから。

788 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:46:37 ]
>>782
どういう突っ込みか理解できないんだけど。

789 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:46:45 ]
>>787
煽りはいいので、論理的な反論をヨロシク



790 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:49:09 ]
なんだか足し算できない子供が偏微分方程式を教えろと言っているような様相だなw

791 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:51:05 ]
と、高卒が申しております。

792 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:51:22 ]
>>785
明示的には書いてないが、その例えと同様に定義しているはずだが。
というのは、その先でキューをスタックで実装しろという問題がある。
意図から考えてランダムアクセスができるはずがない。

793 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:55:36 ]
ひどいパラノイアだな

794 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:55:44 ]
素直にオブジェクト指向の教科書買って、一週間程度でいいから読めよと……
余りにひどス

795 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:56:24 ]
質問者不在の不毛なやりとりだな・・・

796 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:57:49 ]
>>792
Figure 10.1では、まさに配列で実装したスタック(An array implementation of a stack S)を
例示として出してるように見えるわけだが。
その問題は、「キュー(の操作)をスタック(の操作のみ)で実装しろ」という以上の意味はないんじゃね。


飯食ってくるのでちょっと返事遅れる。

797 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:04:05 ]
>>795
だって、これを見た初学者が
「スタックは配列とは関係ありません。サイズフリーなリンクリストで実装するのが正統(キリッ」
とかいう謎の主張を真に受けたりしたら嫌じゃん。

798 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:10:27 ]
>>796
いや、だからその実装を抽象化したのがstackなんだろう。
stackと配列+インデックスは別物。カプセル化されてるだろ

799 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:22:47 ]
なあ、スレチじゃない?



800 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:24:26 ]
いつものC++の頭おかしい人では、ほんと困ります

801 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:25:21 ]
うん。スレ違いです。

802 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:26:16 ]
C++のスレもヤツと思わしき書き込みでメチャメチャになってるんだが
C++の中の人も大変だなw

803 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:33:16 ]
>>798
仮にそうだとしても、配列由来の操作を隠蔽しなければならない確固たる理由はなくね?
事実、C#以外の多くの言語では、スタック操作は配列操作の一部として扱われているわけで。

804 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:45:28 ]
ゲームプログラムなら俺に聞けスレも悲惨な有様だね、死んでしまえばいいのに

805 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:47:56 ]
自分は、VectorからStackが派生しているJavaは気持ち悪いと思う。
反対の、IStackやIQueueがあって、IListがその2つ(やその他)を継承するという作りのほうが自然に感じる。

806 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:48:31 ]
framework 4.0 の並列処理機能についてMSをのぞいて詳しく書いてあるサイトでわかりやすいところない?



807 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:52:42 ]
継承しないで、独立の実装されるのが理想だと思うな。
class ListStack : IList , IStack ←ないけど
class Stack : IStack ←ないけど
どちらも実装は同じでもいいだろう、しかし使う側がちゃんと考えて配列アクセスが不要ならStackを使うとしてくれるとListStackとStackの実装は後で変えることもできる。
基礎ライブラリなので変えることはしないだろうが、実際の開発ではこれが決定的な差になる。

808 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:57:02 ]
>>805
それだと、スタック操作を定義しないListが作れないような

809 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:57:51 ]
作りとしてはこんな感じかな
class ListStack : IList , IStack {
List list;
各種実装
}

class Stack : IStack {
ListStack list;
IStack で公開されるメンバーのみ公開しておく
}

これならListより配列の方が効率的だからという理由で後から object [] といった具合に変えて高速化する事も可能だろう。
上のDoubleListの例でいえば、Listを継承してしまうとListの機能に固定されてしまう訳だ。



810 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 22:30:22 ]
ふらっとが落ち着いたと思ったら、今度はこっちが荒されてて笑った

>>806
一番詳しい所は、Parallel Extensionsチームのブログ
日本語で詳しく書いてある所は知らない。

811 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:30:12 ]
あまりの流れに素で>>806をスルーしてたw
>>810を見て初めて存在に気づいたw

812 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:49:31 ]
うん、確かに分かりやすく記述してあるな。
ただbeta1だけにそもそも手を出さないのが正解かもしれんな。

813 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:55:20 ]
>>803
配列由来の操作を隠蔽しなかったら
他の実装に変えられなくなるじゃん。

814 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:41:17 ]
現在、とある目的のための汎用エディタをつくっているのですが、
GUIを楽に実装したいのでPropertyGrid を使いたいです。

しかし、なんせ汎用エディタなので、設定の項目は xml で定義できるようになっているため、
設定項目をまとめたものをクラスとして定義して PropertyGridに渡す」ということができません。

そういう場合でも PropertyGrid を使う事はできますか?

もしくは、空のクラスをつくって、設定ファイルに従って動的にプロパティを追加..
といったことができれば素直に PropertyGrid を使う事ができて楽なんですけど...



815 名前:デフォルトの名無しさん [2009/06/09(火) 01:51:26 ]
何に対して汎用的なのかサッパリーで
なんで汎用的だと設定項目がxmlになるのかよくわからん
IXmlSerializerとかなかったっけ

816 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:54:03 ]
できます

817 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 02:15:42 ]
すみません、まぎらわしい書き方でしたね。XMLうんぬんは全然関係なくて、
ようするに
項目名(プロパティ名)とその型(整数、文字列、実数)が設定ファイルで定義されている

設定をロードするまでプロパティの個数も名前も型もわからない

ソースコード上でクラスを定義できない

だから PropertyGridもつかえない?? ←ここが問題

こういう目的で PropertyGridをつかうにはどうすればいいのでしょう?
もしくは、動的にクラスのプロパティを追加したり削除したりするにはどうすればいいのでしょう?




818 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 02:40:53 ]
なんかnotepad++とかeclipseみたいな感じか

設定項目をxmlで記述するとして,
その設定項目を実際に反映させるのは誰の役目?
プラグイン方式にするのだったら設定項目を集めたクラスを,プラグイン側で公開するようにすればいいだけなんだけど

819 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 03:45:21 ]
TypeConverter を継承して、好き勝手な property を登録するという方法でやてみました。
その結果、TypeConverter を継承した MyPropConverter をつくり、

[TypeConverter(typeof(MyPropConverter))]
class Hoge{}

という空っぽの Hoge クラスのインスタンスを PropertyGrid.SelectedObject に指定することにより、
好きなだけ任意のプロパティ項目を表示できるようになりました。しかし...

たとえば
オブジェクトAを選択すると、設定テキストAの内容をつかってプロパティを表示、
オブジェクトBを選択すると、設定テキストBの内容をつかってプロパティを表示、
オブジェクトCを選択すると ... するというようにしたいのですが、
すると、いま選択されているのが AなのかBなのか、なんなのかを MyPropConverterが知る必要があります。
(オブジェクトの種類によって GetProperties の戻り値を帰る必要があるため)
これはどのように指定すれば良いのでしょう?

理想をいえば、MyTypeConverter のコンストラクタでそのまま設定テキストを渡して解析させ、
結果に応じて GetProperties の戻り値をかえたいです。しかしそのようにすると、

propertyGrid.SelectedIndex = new Hoge(); の行で実行時エラーになります。問題はそもそも
MyPropConverterのコンストラクタの呼び出し元はどこなのか?ということですが....





820 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:11:56 ]
>>819
ほれ
msdn.microsoft.com/ja-jp/library/system.reflection.emit.typebuilder.aspx
これなら何でもできるぞ

821 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 08:50:01 ]
プロパティの中にプロパティが入ってるやつ
Size 10, 10
 Width 10
 Height 10

それに似た感じで
Cube 10, 10, 10
 X 10
 Y 10
 Height 10
を作るにはどうしたらいいですか?

822 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 08:59:28 ]
何が分からないのか分からない
クラス/構造体の作り方が分からないのか?

823 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:17:26 ]
それは分かりました
クラスの中に構造体が入りません

824 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:20:04 ]
class Hoge {
 struct Point { public int X, Y }
 Point Size { set; get; }
}


825 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:27:10 ]
>>824
C/C++が混ざってるぞ

826 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:38:41 ]
>>825
いや、Y の後ろの ; 忘れてる以外は C# 的に問題ない。
コンパイル通るぞ。

827 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:57:30 ]
XとYのsetとgetはどこに書くのですか?

828 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:01:05 ]
構造体の中にプロパティが入らないからわけわからん・・・・

829 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:07:12 ]
>>826
ごめんPoint型のSizeは盲点だった

public struct Cube {
  private int width, height, length;
  public int Width { get { return this.width; } }
  public int Height { get { return this.height; } }
  public int Length { get { return this.length; } }
  public Cube(int width, int height, int length) {
    this.width = width;
    this.height = height;
    this.length = length;
  }
}



830 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:08:44 ]
>>827
クラスと同じ

>>828
何で入らないと思ったのかkwsk

831 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:39:17 ]
最後にreturn this;入れるのかな?
とりあえず仕組みは分かりました
ありがとうございます!

832 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:58:24 ]
この後この構造体使うプロパティ作ったんだけどビルドでIDE落ちる

833 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:36:21 ]
え、これ構造体の中のプロパティって全部使えないの??
外にまたそれ用のWidth、Height、Lengthのプロパティも作るなら構造体の中にプロパティじゃなくて変数だけでよくない?

と思い始めてるけど勘違いしてるのかな

834 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:10:44 ]
>え、これ構造体の中のプロパティって全部使えないの??
イミフ。set書け
>外にまたそれ用のWidth、Height、Lengthのプロパティも作るなら構造体の中にプロパティじゃなくて変数だけでよくない?
プロパティが何のためにあるか理解してないようだな。

835 名前:デフォルトの名無しさん [2009/06/09(火) 12:24:54 ]
NetworkStream読み出し用のバッファとして、Queueクラス使うのって大げさすぎる?
なるべくコンパクトでオーバーヘッドの少ない方法がいいのだけど、自前でByte用の
リングバッファクラス作った方がよい?

836 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:51:55 ]
そのbyte列ってどういう用途に使って、どのくらいのサイズがあるの?

837 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:59:37 ]
>>836
相手PCからほぼ間断なく来るバイト列を読み込みながら、パケットとして処理出来るまで溜め込んで
パケットを解析して次の処理に渡します。

パケットのサイズは200バイト未満で可変です。
パケット間は区切り文字も何もなくダラダラと流れてきますが、途中○バイト目がパケットサイズに
なっているので、それを頼りにパケットを解析します。

838 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 13:24:36 ]
TypeDescriptorから深い世界へどうぞ。

839 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 13:59:32 ]
なんかここ最近どっかのスレで見たことあるような質問だな・・・



840 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:16:41 ]
>>837
Queueは大袈裟っつーか使い道が違うんじゃないかな
NetworkStreamから1バイトずつ読み取るつもりなわけでもあるまい

841 名前:デフォルトの名無しさん [2009/06/09(火) 15:05:23 ]
WebBrowser.GoSearch メソッド で、IEのデフォルトの検索ページに飛ばしています。
デフォルト設定では Google になっていて、これまでは必ずGoogleに飛んでいた
のですが、ここ数日設定していないのに、Bing に飛んでしまいます。

WebBrowser.GoSearch メソッドを使うとこのBingが自動的に選ばれてしまうのを
これまで通り正しくIEのデフォルトの検索ページに飛ばせるように戻せないでしょうか?
できましたら、変更の仕方を教えていただきたく、何卒よろしくです。

842 名前:841 [2009/06/09(火) 15:07:12 ]
OSはWindowsXpSP3、.NETはVer2.0です。よろしくお願いします。

843 名前:841 [2009/06/09(火) 15:11:43 ]
ああ!!わかりました、標準の検索ページ自体が書き換えられていました。
すみませんでした。。。申し訳ありません。。。

844 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:38:00 ]
バイト数が送られてくるならリングバッファとかじゃなくて、
単にキューでバイト配列を管理したらいいんじゃない?


845 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:45:01 ]
受信単位の内部バッファをQueueで溜め込むのは普通にありだろう。
深く考えずに単一バッファにして追記していって消費したバイト分を前にずらすという力技でもいけちゃいそう。
サーバの話なら論外だけど。

846 名前:デフォルトの名無しさん [2009/06/09(火) 16:32:02 ]
tcpClient tcp;
public NetworkStream ns;
public Queue<Byte> ReadQueue = new Queue<Byte>();
Byte[] ReadData = new byte[512];

public Test(string hostname, int port)
{
tcp = new TcpClient(hostname, port);
ns = tcp.GetStream();
ns.BeginRead(ReadData, 0, ReadData.Length, CBRead, ns);
}

private void CBRead(IAsyncResult ar)
{
NetworkStream ns = (NetworkStream)ar.AsyncState;
Int32 cnt = ns.EndRead(ar);
for (int i = 0; i < cnt; i++)
{
ReadQueue.Enqueue(ReadData[i]);
}
ns.BeginRead(ReadData, 0, ReadData.Length, CBRead, ns);
}


Queueを使ってやりたいことは大体こんな感じです。
延々とバックグラウンドで受信しているイメージです。
パフォーマンス的にどうなのかなあ、自前リングバッファの方がいいのかなあと言う疑問でした。

ちょっと質問からずれるのですが、連続してストリームを処理する場合のBeginReadの
使い方ってこれであってます?

847 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:34:52 ]
Mainが無かったです

static void Main(string[] args)
{
test("192.168.1.100", 10001);
while (true)
{
while (wl.ReadQueue.Count > 0)
{
Byte b = wl.ReadQueue.Dequeue();
Console.Write(b.ToString("X2"));
}
}
}


848 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:47:38 ]
もうQueueなんて使わないでMemoryStreamに流し続ければいいんでない?
そしてCBRead()の最後がキモい
だれも止められないじゃん

849 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:55:12 ]
>>848
どうしてもバッファから取り出した分を詰める作業が必要なのでMemoryStreamはちょっと。

最後キモイですか。
我ながらこりゃあいいやと思ったんですが、どうしましょうか。



850 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:08:55 ]
んーいまいちQueueの用途がわからない
もしかして>>846は肝心の”取り出した分を詰める作業”が書かれていない?

しかも,そもそもTCPなんだからByte型のデータを自前でバッファする必要性をあまり感じないんだが.
むしろQueueに突っ込むのは,データストリームから取り出した使えるデータの方がヨサゲ

851 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:13:56 ]
だよね
少なくともバイト数が分かる仕様ぽいから、
受信スレッドがひたすらまとまり単位でバイト配列に取り出してバイト配列をキューに追加
処理スレッドがキューからひたすら取り出して処理すればいいような気がする。
ああ、スレッド間の同期はちゃんとやってね。


852 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:15:44 ]
その場合は簡単なブロッキングキューを作ればよりシンプルになるかも。

853 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 19:30:09 ]
>>810
亀だけどサンクス
思ったより知りたいことが書いてあったので為になった!

854 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:41:04 ]
public static object GetMyObject() {
 AssemblyName asmName = new AssemblyName("myAsm");
 AssemblyBuilder asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.Run);
 ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule("myModule");
 TypeBuilder typeBuilder = modBuilder.DefineType("myClass", TypeAttributes.Public, typeof(object));
 typeBuilder.DefineField("x", typeof(int), FieldAttributes.Public);
 typeBuilder.DefineField("y", typeof(int), FieldAttributes.Public);
 Type mytype = typeBuilder.CreateType();
 return Activator.CreateInstance(mytype);
}

という動的クラスのインスタンスを返す関数を作って

propertyGrid.SelectedObject = GetMyObject();

とやってみましたが、プロパティグリッドにはなにも表示されません。
GetMyObject() の戻り値をみてみたところ、クラス名 myClass で
メンバ x, y も存在し、意図したとおりのクラスとインスタンスが
生成されているように見えるのですが、プロパティグリッド反映されないのはなぜなのでしょうか?



855 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:45:43 ]
だってobjectだもの

856 名前:デフォルトの名無しさん [2009/06/09(火) 20:46:32 ]
肝心のプロパティを定義してないじゃないか

857 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:53:34 ]
そうだった
objectじゃなくてもいいんだった

858 名前:デフォルトの名無しさん [2009/06/09(火) 20:56:33 ]
プロパティグリッドで使うだけなら本当に型を生成しなくてもTypeDescriptorで簡単にプロパティを追加できるよ

859 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:57:59 ]
>>856の書いてるように、フィールドでは駄目だよ。
基本的には読み書き可能なプロパティを定義しないと。




860 名前:デフォルトの名無しさん [2009/06/09(火) 21:04:18 ]
プロパティを定義するならアクセサメソッドの実装を
ILGeneratorで生成しないといけないので超面倒だぜ

861 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:12:53 ]
まあぶっちゃけDataSetに読み込んでDataRowViewを使えばいいんじゃないかなw


862 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:15:02 ]
ここまでしてpropertygrid使う意味があるのだろうか

863 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:25:16 ]
自分で作ることと総合的に考えれば、圧倒的に楽になる可能性はあるよ。
DataTableに一行目とかに読み込んで、DataRowView(DefaultViewでもいい)を取り出して、
1行目をPropertyGridにバインドすれば簡単なことならできる。
これで事足りれば、新しいクラスを作ったりTypeDescripter絡みを自分で処理する必要はない。


864 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:30:30 ]
1行に1文字以上typoがあるはつは信用ならにゃい

865 名前:デフォルトの名無しさん [2009/06/09(火) 21:31:39 ]
CLR型やアセンブリを作り捨てしたらメモリリークするぞ

866 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:34:41 ]
ちょっと教えてください。

ListViewのList表示で横スクロールするときになめらかにスクロール
させたいんだけど、どうすればいいんでしょうか。

エクスプローラみたいなスクロールじゃなくてFileVisorみたいなスク
ロールといえばイメージ伝わるかな。

ListBoxに無理矢理描画しようかとも思ったけど面倒だし、うまい方法
はないでしょうか。よろしくお願いします。


867 名前:デフォルトの名無しさん [2009/06/09(火) 22:37:22 ]
WPFに移行する

868 名前:デフォルトの名無しさん [2009/06/10(水) 07:38:42 ]
今勉強中なんですけど
カプセル化って隠すという意味ですよね?
デリゲートが何でカプセル化になるのか今一ピンとこないんですが

869 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:09:36 ]
>カプセル化って隠すという意味ですよね?
多分違う



870 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:19:23 ]
どのメソッドを呼び出すか?を隠してる

871 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:29:56 ]
隠してない

872 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:41:45 ]
ある意味隠してる

873 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:16:07 ]
アクセス制限として見ると隠してないが、
カプセル化として見れば隠してる

874 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:51:36 ]
>>868
雑だが
Commandパターン
クロージャ

875 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:27:40 ]
ヘジたん的にはデザイナでコントロールクリック一発、それそこに書けを実現するための部品の一つでしかないんだろうな。
複数のメソッドが登録できるあたり、発想は明らかにクロージャー等ではないし、今ではクロージャー化しつつあるけど

876 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:38:35 ]
小理屈よりも、まずやりたい事ありきというC#の考え方は嫌いじゃないです
IDEの支援を想定した文法とか、常識的にはこの文法冗長でだるいだろう普通やめるだろうというのが平気で入っている。

877 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:08:08 ]
カプセル化も大きなウェイトを占める概念の一つであって
それがすべてじゃないと思うよ。

878 名前:デフォルトの名無しさん [2009/06/10(水) 11:10:29 ]
オブジェクト指向的にはメソッド一つだけのインターフェイスと等価
パターンとしてよく必要になるんだけど>>876の言うように面倒だから言語に取り込んだ

879 名前:デフォルトの名無しさん [2009/06/10(水) 16:45:29 ]
非同期実行する場合に

new Thread
ThreadPool.QueueUserWorkItem
BackgroundWorker
delegate.BeginInvoke
…ほかにもある?

なんか色々あって混乱するけど、どういう場合にどれを使えばいいの?




880 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 16:49:47 ]
どうぞ
ttp://codezine.jp/article/detail/144?p=1

881 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:25:53 ]
>>880
ありがとう、でももうちっと最近の記事じゃないとBackgroundWorkerとか扱ってないかも

private void BackgroundStart()
{
Action act = () =>
{
while (true)
{
Thread.Sleep(50);
Console.WriteLine("にゃー!");
}
};
act.BeginInvoke(null, null);
}

static void Main(string[] args)
{
BackgroundStart();
while (true)
{
Thread.Sleep(50);
Console.WriteLine("わんわん!");
}
}

今はこんな感じで書いてるけど、可読性いいのかこれ?
BackgroundWorkerはいろいろリッチだけど、使うの難しそう。

882 名前:854 mailto:sage [2009/06/10(水) 17:31:56 ]
どうもありがとう filed ではなくて property をつくったら見事意図したとおりにできました!

最後にひとつ。
動的に作ったクラス、のインスタンスのプロパティに値を設定するには
どうすればよいですか?
もしくは、PropertyGird をプログラム側から操作して、PropertyGrid.SelectedObject
のプロパティを変更することはできますか?


883 名前:デフォルトの名無しさん [2009/06/10(水) 17:44:41 ]
リフレクションを使う
プロパティを生成できた奴がそんな質問をするなんて考えられないと思うんだが

884 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:48:08 ]
わざとだろ、自分で考えろ以上終了だな

885 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:30:56 ]
ボスケテー


AA作成支援ソフトっぽいもの作ってまして
標準環境(www.geocities.co.jp/HeartLand-Yurinoki/1836/mona_font_settei.html
で指定した文字列の表示幅を取得する方法を探してます

Graphics.MeasureStringや
TextRenderer.MeasureTextなんかを使えばいけるんだと思うんですが
どーにもIE標準環境の作り方がわかりません(Graphicsオブジェクトどーやってもってくるの?)

おせーてくださーい

886 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:37:54 ]
onpaintとかのじゃだめなのかな?

887 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:48:23 ]
普通にControl.CreateGraphicsでもいいしGetDCしたのからFromHdcでもいいし

888 名前:885 mailto:sage [2009/06/10(水) 22:50:23 ]
何が文字列の表示幅を決定している要因なのかよく理解していないものでして
てっきりGraphicsオブジェクトのプロパティに大きく依存するのかと思ったんですが
今メンバ見てもそれっぽいもの無いみたいですね。。


例えば下の二つの文字列

「ああああああ」
「..............................」

を長さ測定関数に渡した時に同一の値が帰ってくるような
状態をとりあえず目指していろいろやってるんですが
なかなかうまくいかないですね・・・

とりあえずもうちょっと調べてみますー

889 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:12:03 ]
フォントだよ



890 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:33:33 ]
あー
なんとかできたっぽいです
同じフォントでも環境によって表示のされ方違うのかと思ってました

レスくれた方ありがとでしたー

891 名前:854 mailto:sage [2009/06/11(木) 00:54:54 ]
以下のようにしたらうまくいきました
リフレクターというヒントをくれたかた、どうもありがとう
Type type = (Type)MyClass;
type.GetProperty("x").SetValue(propertyGrid.SelectedObject, 1234, null);

いままでずっと C をやっていて C# も .Net おとといはじめたばかりなので、
ヒントがなければライブラリのどこに何があるかさっぱりわかりませんでした。
どうもありがとう!

892 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:01:32 ]
どういたしまして
お役に立てて光栄です

893 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:42:51 ]
質問者の笑顔のために

894 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 08:25:30 ]
>>881
> Action act = () =>

なんぞこれ

895 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 08:38:37 ]
lambda式でしょ。

896 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 13:05:26 ]
>>894
actという名前の変数はAction型
() => {...} はAction型のリテラル(ラムダ式)で,空の引数を受け取って何かしてる

897 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 17:52:31 ]
C#のAAはこれでおk?
(c_c#)

898 名前:デフォルトの名無しさん [2009/06/11(木) 22:31:35 ]
C#の式として有効なものしか認めない

899 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 22:56:39 ]
>>897
//(c_c#)

でOK



900 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 22:57:17 ]
"(c_c#)"

901 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:33:06 ]
(^c_^#)

902 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:42:17 ]
(T_T)=>("^A^")

903 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 11:28:58 ]
*/

904 名前: ◆BOHwjyHW6o [2009/06/12(金) 12:24:43 ]
完全にハマりました。
質問させてください。

今、S/C間の通信プログラムを書いています。
--------
//↓サーバー側プログラム
this.mListener = new TcpListener(IPAddress.Any, 58201);
this.mListener.Start();
clTCPClient = this.mListener.AcceptTcpClient();
--------
//↓クライアント側プログラム
TcpClient tcp = new TcpClient();
tcp.Connect("@", 58201);
--------
@をlocalhostにすると接続が確認できます。
@をグローバルIPにすると接続できなくなります。
SocketExceptionが出ました。
ErrorCodeは10061
エラーメッセージは「対象のコンピュータによって拒否されたため、接続できませんでした。@:59201」と出ました。


905 名前: ◆BOHwjyHW6o mailto:sage [2009/06/12(金) 12:26:01 ]
ポートが空いていないのだろうと思い、
ttp://www.navnav.jp/port/
ココでポートの解放チェックを行いました。
結果、ポートは空いていました。
(ポート解放用と思われる接続もサーバー側のAcceptTcpClientでキャッチできました)

@をグローバルIPにして接続を行いたいのですが、どうすれば良いでしょうか?
また、何を確認すべきでしょうか?

環境は以下の通りです。
・PCは1台でテストしています。(OSはXP)
・Visual Studio 2008 で開発を行っています。
・ウィルスバスターは終了させた状態です。
・ルーターはフレッツ光のCTUです。
・ハブはBUFFALOのAirStationをルーターOFFモードで利用しています。


906 名前: ◆BOHwjyHW6o mailto:sage [2009/06/12(金) 12:28:30 ]
すいません。エラーメッセージ間違いました。

正しくは、
「対象のコンピュータによって拒否されたため、接続できませんでした。@:58201」
です。

よろしくお願いします。

907 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:33:04 ]
どこか上流でファイアウォールでも動いているんじゃない?

908 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:37:08 ]
ん?
ルータの内側にいるのに,外側のIPに接続しようとしてる?
ルータの実装によるけど,ふつーはつなげないんじゃないかな

909 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:41:36 ]
NAPTしてるのを適切に処理してないって落ちじゃないの



910 名前:777 mailto:sage [2009/06/12(金) 13:12:08 ]
SqlConnectionStringBuilderでAttachDBFilenameだけをクリア
したいのですが、ヘルプ通りnullを渡すとエラーになります。
他にどんな方法があるんでしょうか?

911 名前:910 mailto:sage [2009/06/12(金) 13:13:29 ]
申し訳ない。
>>910の名前間違いです。777ではありません

912 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:19:59 ]
SqlConnectionStringBuilder strbld = new SqlConnectionStringBuilder();
strbld.AttachDBFilename = "";

913 名前:910 mailto:sage [2009/06/12(金) 13:24:23 ]
>>912
やっぱりそれしかないんですね。
最終的な文に"AttachDbFilename=;"が入っちゃうんで消せないかなと
思ってたんですが、そうしておきます。ありがとう。

914 名前: ◆BOHwjyHW6o mailto:sage [2009/06/12(金) 13:41:29 ]
>>907-909
返答ありがとうございます。
色々試行錯誤しているのですが、結局駄目でした。
localhostで作業を進め、サーバー立ては次の機会に行います。
ありがとうございました。

915 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:13:46 ]
試行錯誤ってルーターを別の機種にするしか無いんじゃ・・・

916 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 16:13:14 ]
フレッツ光のCTUは変更できないよ。
専用ルーターだから。

917 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 19:44:54 ]
>>905
そういうルータ越しの環境だと、自分とこからグローバルIPアドレスでルータを越えてまた自分とこにくる通信は無理だと思う。
クライアントを別の回線(携帯とか友人宅・会社・学校)からやってみたらどう?

918 名前:デフォルトの名無しさん [2009/06/12(金) 22:28:23 ]
VS2008Pro、WinXPPro、C#で開発しています。
単体テストの機能を始めて使ってみたのですが、これには
「あるディレクトリ以下にある全てのデータファイルでテストを実施する」
という総当り的な、機能は付いているのでしょうか?

csvで、テストケースを一個一個作成していくのも面倒なので、個人的にはデータファイルを作って、
それをあるディレクトリ以下に放り込めば、勝手にテストしてくれるような機能を期待していたのですが……
やはり、自前で作るしかないですかねぇ。とはいっても、自前で作ってるのは、すでにあって、
今回はそれを既製品に移行しようという話なので、自前で作る云々になると話がズレて来るんです。

どなたか回答をお願いします。

919 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:45:39 ]
自分の場合、ひかりone(旧テプコひかりからの移行なのでちょっと構成が違う)で
「光モデム」−「ルーター(ヤマハ)」−「サーバーやらクライアントやら」
って構成でグローバルIPアドレス指定で内部のクライアントからサーバー見えてるよ



920 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:50:22 ]
>>914はflet'sつまりntt製のモデム兼ルータってことじゃないかと

921 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 23:13:48 ]
>>913


SqlConnectionStringBuilder strbld = new SqlConnectionStringBuilder();
strbld.AttachDBFilename = "";



SqlConnectionStringBuilder strbld = new SqlConnectionStringBuilder();
strbld.Remove("AttachDBFilename");

922 名前:デフォルトの名無しさん [2009/06/13(土) 21:45:53 ]
フォルダが「共有フォルダ」かどうかを知ってアイコンに手のマークを
付けるにはどうしたらいいか知りたく。

「共有フォルダ」の一覧を得るには
System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_Share");
これでいいという情報は得ましたものの、これでなくてDirevtoruInfoのAttributes
のように高速で一発でわかる方法があれば尚ありがたく。

またアイコンに手のマークを付けるにはどのようにするものでしょう、
ご指導をいただきたく。


923 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 21:52:29 ]
別管理なんだから、なんたらInfo からじゃ取れないだろ。
まっとうにやるなら、NetShareEnum() だな。それほど遅くない。

オーバーレイは ImageList_SetOverlayImage() とかで。

924 名前:デフォルトの名無しさん [2009/06/13(土) 22:23:34 ]
>>923
おお!!そういう方法があったのですか!
ありがとうございます。勉強してみます!!
助かりました!






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<229KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef