1 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 21:04:54 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part66 pc12.2ch.net/test/read.cgi/tech/1231640498/ ※part63, part66 が重複していたようですので part69 としました。
652 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 01:30:20 ] >>644 そういう用途にも使えるってだけでWindowsでもマルチスレッドでvolatileなんて使わない mutexなりクリティカルセクションなりInterlocked-系関数なり使えばそこでフェンス張られるし (Interlocked-系関数でvolatile使われてるけどね。間接的には使うことになるのかな) やっぱり組み込みとかドライバ以外で使うことはないと思うな
653 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:24:40 ] >>647 , >>652 どうも、どうも >>647 >そういう排他制御の仕組みを自分で作るときに使う ずばり、自分でそういう仕組みは作ることないです
654 名前:645 mailto:sage [2009/05/31(日) 20:04:50 ] >>651 忘れた。 原著第3版に書いてあった。 確か、最初の方の章に。
655 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:20:51 ] 改訂2版にはどこにも書いていないんだが、 第3版には本当に書いてあるのか? 第4版まであと2年はかかりそうな気がするし、 第3版買ってくるか・・・
656 名前:645 mailto:sage [2009/05/31(日) 21:28:28 ] >>655 第3版には本当に書いてある。 厳密に同じコードかどうが覚えてないが、 const版をnon-const版にて呼び出してconst_castでconst属性を外す という方式であることは本当。 俺もそんなことして良いの!?と思ったから信じられなくても無理はない。
657 名前:645 mailto:sage [2009/05/31(日) 21:31:01 ] わざわざ引っ張ってきて確かめみた。 原著第3版(日本語翻訳されているもの)で 15ページから始まる項目にある。
658 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:48:18 ] 2版の21項「使えるときは、必ずconstを使おう」に 対応するんじゃないかなと思うけど、 そこではmutableをサポートしてないコンパイラのための苦肉の策として 「みっともないけど」と前置きした上でconst外しをしている。 これのことじゃないよな?
659 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:06:17 ] >>658 じゃないってば。 少しは俺を信じろ(笑) 他の人も誰か証言してくれ。
660 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:08:18 ] ようやっと見つけたが、 さっぱり読めなくて意図が分からん。 books.google.co.jp/books?id=d-2Im_Ox7qMC&pg=PA24&as_brr=3&source=gbs_toc_r&cad=0_0#PPA41,M1 俺の英語力も落ちたな・・・
661 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:10:32 ] ああ、これって王家の血を引く者にしか読めないよ
662 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:10:40 ] >>659 すまんwww 明日買ってくる。
663 名前:645 mailto:sage [2009/05/31(日) 22:12:21 ] >>660 メンバ関数foo()のconst版とnon-const版の定義が 同じようなものになることは多々あるじゃない。 同じような定義を繰り返し書きたくない、そんなあなたにconst_cast って言うような主旨。 const版をうまく定義することで、non-const版の定義は それを呼び出してconst性を除去するだけ で良くなる。
664 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:13:17 ] >>661 俺読めたw ・・・そろそろ天の啓示が来る頃だろうか。
665 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:14:26 ] >>664 もしかして、お兄様なの! こんなところで巡り合えるなんて。。
666 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:16:24 ] おまえか しょせん、暇をもてあました神々の遊び
667 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:20:04 ] 理解した。解説thx 感覚的にconst側で非constのコードを 再利用したくなりそうなものだけど それも理由があるのかな。 とりあえず第3版買ってくるよ。 生き別れた妹はいなかった気がするし。
668 名前:645 mailto:sage [2009/05/31(日) 22:23:19 ] >>667 俺もそう思ったが、 理由としては const側で非constメンバ関数を呼び出すというのはダメ ってことらしい。 たとえ実際にはオブジェクトが変更されないとしても。 まあ買ってくる価値はあるかと。 何てったって名著だし、無駄な出費ではないと思う。
669 名前:デフォルトの名無しさん [2009/05/31(日) 22:41:23 ] #define UNICODE #define _UNICODE で定義されたソースコードがあるとします。 それを #define UNICODE #define _UNICODE と定義してはエラーになってしまう、つまりANSI版のソースに混ぜて使いたい場合どの ようにすればいいのでしょうか? たとえば int WINAPI WinMain(…){ …(ANSIソースコード) sub(); } int sub(){ #define UNICODE #define _UNICODE …(UNICODEソースコード) } みたいなことはできるでしょうか?
670 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:49:30 ] できます。
671 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:52:12 ] いまいち質問内容がよく分からんが、 #define UNICODE #define _UNICODE したあと #undef UNICODE #undef _UNICODE すればdefineは消える。 でもWIN32なら、 UNICODE版、ANSI版両方そろってるはずだが。
672 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:25:45 ] CreateWindow("aaa",.... とかやってるんだろ
673 名前:デフォルトの名無しさん [2009/05/31(日) 23:59:32 ] >>670 >>671 いやできなかった 結論からいうと 原理からいうとその方法でできるのは確かなんだが UNICODEと_UNICODEは最初の最初で定義しておかなければならならないみたいだ 先にwindows.hとか読み込まれてるからその関係で動作がおかしくなる >>672 アホすぎ てか解決法をいうと単純にソースファイルをわければ解決できる 最初からやればよかったけど
674 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:14:01 ] 本筋とは全く関係ないが、>>669 を見ると_tWinMainにしろと言いたくなる。
675 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 01:15:41 ] もうこれから書くコードは全部_UNICODEでいいかもと思ってしまうがな。
676 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 04:06:41 ] なに、いいってことよ┏( ^ω^)┛
677 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:32:49 ] 下の様な感じで合成関数を作ろうと思ったのですが、 error C2678: 二項演算子 '*' : 型 'composite_impl<result_type_,arg_type_>' の左オペランドを扱う演算子が見つかりません とエラーが出ます。どうやって回避すればいいのでしょうか?
678 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:33:55 ] struct composite_type{}; template<typename result_type_, typename arg_type_> struct composite_impl{ typedef result_type_ result_type; typedef arg_type_ arg_type; typedef result_type (*fn_type)(arg_type); static fn_type &fn_holder(){ static fn_type fn; return fn; } result_type operator ()(arg_type a) const{ return (fn_holder())(a); } }; template<typename result_type_a_, typename result_type_b_, typename arg_type_b_> struct composite_impl<result_type_a_, composite_impl<result_type_b_, arg_type_b_> >{ typedef result_type_a_ result_type; typedef arg_type_b_ arg_type; typedef result_type (*fn_type)(arg_type); static fn_type &fn_holder(){ static fn_type fn; return fn; } result_type operator ()(arg_type a) const{ return (fn_holder())(composite_impl<result_type_b, arg_type_b_>()(a)); } }; template<typename result_type, typename arg_type> inline composite_impl<result_type, arg_type> operator *(composite_type, result_type (*fn)(arg_type)){ composite_impl<result_type, arg_type> a; a.fn_holder() = fn; return a; } template<typename result_type_a, typename result_type_b, typename arg_type_b> inline composite_impl<result_type_a, composite_impl<result_type_b, arg_type_b> > operator *(composite_impl<result_type_a, result_type_b> a, result_type_b (*fn)(arg_type_b)){ composite_impl<result_type_a, composite_impl<result_type_b, arg_type_b> > a; a.fn_holder() = fn; return a; } composite_type composite; #include <iostream> #include <cstring> int fn_a(int a){ return a * a; } char *fn_b(int a){ static char str[0xFF]; std::sprintf(str, "%d", a + 1); return str; } int main(){ std::cout << (composite * fn_a * fn_b)(2) << std::endl; return 0; }
679 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:42:39 ] >>668 > const側で非constメンバ関数を呼び出すというのはダメ > ってことらしい。 これって、単純にconstメンバ関数内で非constメンバ関数を呼び出すと コンパイルが通らないって話。
680 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 15:00:03 ] >>679 const_castで*thisからconstを外すって話だよ。
681 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 15:12:45 ] >>680 あーそういうことね。 でも*thisのconst外しが駄目なのも当たり前の話だな。
682 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:59:19 ] *thisのconstは外してないぜ むしろconstメンバ関数を呼ぶために*thisにconstを付けてる 外してるのは戻り値のconst
683 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:04:09 ] >>682 >>667-668 >>679-681 を読みかえしくれ。
684 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:13:26 ] ??? >>645 のことだろ? static_cast<const sample&>(*this)は明らかに*thisにconstを付けてる 何か間違ってるのか
685 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:15:12 ] >>684 > >>645 のことだろ? 否。 >>667-668 の事。 それに対し>>679-681 というやりとりが行われている。 皆は>>645 は理解している。
686 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:18:48 ] なるほど理解した
687 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:34:32 ] いろいろあるよ。 www.sengoku.co.jp/CategoryIndex/wire.htm 個人的には極細より線と鈴メッキ銅線が好きだけど (どうせ趣味だし)、 信頼性からジュンフロン線使う人のほうが多い。 このシリーズのより線はストリッパー必須。 ジュンフロンは苦手です。ええ。
688 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:36:18 ] ご、誤爆・・・
689 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:43:04 ] どんまい、 というかハードとソフト両方いけるとかうらやましい
690 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:45:09 ] >>687 全然 なんだかわからないwww すごいな。
691 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 01:02:51 ] とりあえずイミフだからストリッパーってあたりに反応しとこうぜ
692 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 01:44:25 ] ストリッパーくらい分かるだろ 線の被覆を剥ぐための工具だろ
693 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 02:19:34 ] struct A{A();virtual void fun() = 0;}; struct B:A{B();fun();}; struct C{C(A&b); C problem(A&b);}; C c(B()); c.problem(B()); // no-match function になるのは何故? C::problem(一時オブジェクト参照)を弾くならコンストラクタでも弾くべきだと思うんだけど
694 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 02:57:23 ] >>692 しらんがな(´・ω・`)
695 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 03:51:45 ] ドラクエなどで登場する戦士や魔法使いを意味するFighterクラスと Mageクラスがあったとして、 そのクラスのインスタンスが持つHPやMP,攻撃力などのステータス一覧を表示する関数を作るとき、 クラス自信にその関数を持たせるのか、あるいはクラスとは関係のない部分で作るのか、どちらがいいんでしょう? クラス設計の考え方がまったくわかりません・・。
696 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 06:17:21 ] >>695 その場合はカプセル化を優先する。 まず、HPやMP,攻撃力などのステータスを格納する変数(intだったりstd::size_tだったりするだろう)のアクセス指定子がどう宣言されているかによって考えを分ける。 1. もしprivateで宣言されていて、そのステータスをpublicなメンバ関数h_point()で取得するような仕組みにしている場合(むろんそれが望ましい)は、「クラスとは関係のない部分で作る」が正解。 つまり別の関数show_status(〜)を作り、〜の部分にキャラクタのインスタンスを渡すようにする。 2. もしpublicで宣言されているならば、「クラス自身にその関数を持たせる」ないし「friend指定して外部関数を作る」が正解。しかしステータスを格納する変数がpublic指定されていること自体、そもそも望ましくないことだが。
697 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 06:23:39 ] >>693 private継承しているからだろ
698 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 08:07:42 ] >>693 そのコンストラクタで本当に動くか試した?
699 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 17:56:43 ] C c(B()); は C c(B (*)()); という関数宣言に解釈される。 B b0; C c(b0); c.problem(b0); とするとできましたが。 関数の引数のリファレンスの型にconstをつけて "const B&b"、"const A&b"のようにすると C c = C(B()); c.problem(B()); でもいけました。 なぜかは僕には分かりませんのでどなたか解説お願いします。 コンパイラはgcc4.2.1で確かめました。
700 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 19:02:59 ] const参照型のインスタンスは、呼び出す側が値渡しと同じ感覚で扱えるように、 一次オブジェクトで初期化できることになっている。
701 名前:693 mailto:sage [2009/06/02(火) 20:13:27 ] 実コードはstruct Bにtemplate特殊化やらvirtualメンバやらなんやら絡んで魔窟状態で実は C c(static_cacst<A&>(B())); に成ってますた。 >>699 C c((B())); でも逝けますね。
702 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 21:44:52 ] >>701 Effective STL の第1章第6項「C++の最も奇妙な解析に注意しよう」に書かれてるね。 (この本自体はSTLの解説本だけど…) でも、すべてのコンパイラで成功するとも書かれていない・・・おそろしや。
703 名前:デフォルトの名無しさん [2009/06/03(水) 17:16:04 ] #include <stdio.h> void main(void) { char data[3465300] int idata[3465300]; int KOTAE[3465300/2]; int data1[12032/2][300]; int idata1[300][300]; int i,j,id,a,b,No,day,LDAY,d; char fnamein,fnameout; FILE *fin,*fout; #define LDAY 30 //月ごとに変える //No=1→ステータス;No=2→交通量;No3=速度;No4=オキュパンシー #define No 2 for(day=0;day<LDAY;day++){ d=day+1; printf("%d/%d\n",d,LDAY); sprintf(fnamein,"D:\\/torakan-Y/R_barashi/Ku0409/Ku0409%02d.dat",d); sprintf(fnameout,"D:\\/torakan-Y/R_barashi/Ku04/Q_Ku0409%02d.txt",d); fin = fopen(fnamein,"rb"); fread(&data,1,3465216,fin); fclose(fin); if((fout=fopen(fnameout,"w"))==NULL) printf("Cannot open output file\n");
704 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 17:17:18 ] >>703 なんだこの凶悪なのはっ!!
705 名前:703 [2009/06/03(水) 17:19:00 ] 703のプログラムですが、コンパイルは通る一方で 出力される結果が同じ数字の繰り返しになってしまいます。 エラーの原因としては、以下の4行が怪しいと思っています。 詳しい方、よろしくお願いします。 sprintf(fnameout,"D:\\/torakan-Y/R_barashi/Ku04/Q_Ku0409%02d.txt",d); fin = fopen(fnamein,"rb"); fread(&data,1,3465216,fin); fclose(fin);
706 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 17:23:44 ] >>705 あんたが勝手に”エラー”って呼んでいるものを,具体的に書き表してごらんよ 少なくとも”出力される結果が同じ数字の繰り返し”になることは具体的に書け
707 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 17:29:33 ] 変数宣言で嫌になるものは久しぶり…
708 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 17:32:39 ] スレの住人の中におエスパー様はおられませんか?
709 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 17:34:40 ] >>703 とりあえず変数を#defineで上書きしているのが分かった
710 名前:703 [2009/06/03(水) 17:42:02 ] ≫>705様 レスありがとうございます。 出力されたファイルを開くと 526855268552685といった感じで同じ数列がただ繰り返されたファイルが 出力されます。 このプログラムはもともと、膨大なデータの中から 一部分を抽出するプログラムとなっています。 また、その莫大なデータにはそのような数列は見られないので 勝手にエラーと判定してしまいました。 >709様 ありがとうございます。 さっそく そこを修正したいと思います。
711 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 17:52:30 ] >>710 かんじんのファイルに出力している部分が・・・ねぇwwwwwwさすがにESPじゃない俺にはむり
712 名前:703 [2009/06/03(水) 17:57:36 ] for(i=0;i<3465216;i++){ idata[i]=int(data[i]); if(idata[i]<0){ idata[i]=256+idata[i]; } } id=0; for(i=0;i<3465216;i=i+2){ a=idata[i]/16; b=idata[i]%16; KOTAE[id]=a*16*16*16+b*16*16+idata[i+1]; id=id+1; } id=0; for(j=0;j<288;j++){ for(i=0;i<12032/2;i++){ data1[i][j]=KOTAE[id]; id=id+1; } }
713 名前:703 [2009/06/03(水) 18:00:29 ] /*区間データの抜き出し*/ id=0; //////6号三郷JCT‐江戸橋JCT間//////////// for(j=0;j<288;j++){ for(i=0;i<17;i++){ idata1[id][j]=data1[4*i+(8+4*501+No-1)][j]; id=id+1; } id=0; } for(j=0;j<288;j++){ for(i=0;i<2;i++){ idata1[id+17][j]=data1[4*i+(8+4*772+No-1)][j]; id=id+1; } id=0; }
714 名前:703 [2009/06/03(水) 18:02:01 ] for(j=0;j<288;j++){ for(i=0;i<15;i++){ idata1[id+19][j]=data1[4*i+(8+4*542+No-1)][j]; id=id+1; } id=0; } for(j=0;j<288;j++){ for(i=0;i<34;i++){ fprintf(fout,"%d",idata1[i][j]); } fprintf(fout,"\n"); } } }
715 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 18:02:27 ] >>712 > for(j=0;j<288;j++){ > for(i=0;i<12032/2;i++){ この辺で悪意を感じた あと,もし仮に名前を付け替えるのが許可されているなら,ぜひデータ構造と名前を変えるべきだとおもふ
716 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 18:10:48 ] まずマジックナンバーが多過ぎるから定数で宣言して分かりやすい名前を付けるべき それと、 >char fnamein,fnameout; ここはファイル名格納するバッファじゃなかろうか
717 名前:703 [2009/06/03(水) 18:11:01 ] >712 すいません。まったく悪意はないです。 もうしわけないです。 名前は変更できます。
718 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 18:16:08 ] なげぇwww codepad ttp://codepad.org/ せめてここに貼るとかさあ。。
719 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 18:19:07 ] そもそも何の目的で作られた何をするためのプログラムで どうなれば成功なんだよ そこが分からないのに何も答えられるわけがないだろ どうせ宿題なんだろうけど
720 名前:703 [2009/06/03(水) 18:26:59 ] >719様 説明不足ですいません。 トラカンデータといわれる交通量や平均速度といった 情報が網羅されているデータから 一部分を抽出して、自分たちが調べたい路線の 交通量を抜き取るプログラムです。 数列が同じ数字の繰り返しにならなければ、ほぼ成功だと思います。 宿題ではないです。申し訳ないです。 >718様 さっそく、張ってみようと思います。
721 名前:703 [2009/06/03(水) 18:30:03 ] codepad.org/jC9g9phJ さっそく貼ってみました。
722 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 18:32:15 ] ふむふむ ひどすぎて目眩がしてきた 一つ言えるのは、これはCであってC++ではないということだ だからスレ違い
723 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 18:32:56 ] と思ったらnew使ってるからC++かよ なんだこれは
724 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 18:52:09 ] 読むのに時間かかりそうだ…
725 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 19:03:32 ] 管理番号とかファイルのパスとか 危険な香りのする文字列がたくさんあるけど大丈夫なのか
726 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 19:09:39 ] >>703 とりあえず fread(&data,1,3465216,fin); ↓ fread(data,1,3465216,fin);
727 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 19:12:43 ] プログラムに間違いらしきものはなし。 データ解析部分でデータの構造が合致していないような感じだが?
728 名前:703 [2009/06/03(水) 19:18:54 ] >726様 あなたは神様です。 あなたのおかげで無事解決しました。 なんてお礼をいえばいいのかわかりません。
729 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 20:18:52 ] すげえうれしくない感謝の言葉だなぁ
730 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 20:22:20 ] You are God. I solved the problem, thank you. What it only has to say the reward is not understood.
731 名前:703 [2009/06/03(水) 20:27:36 ] と思ったら、まだ解決していませんでした。 申し訳ないです。
732 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 20:39:13 ] <stdexcept> と <exception> って、 どっちをインクルードするほうが望ましいの?
733 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 20:41:32 ] <stdexcept>で定義されている例外を使いたければ<stdexcept>
734 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 20:42:12 ] >>731 書き直してもいい? 要するにファイルの内容は unsigned short 型のデータが ビッグエンディアンで 6016x288 個格納されているのを data1 に代入すれば data も idata も KOTAE も必要ないよね
735 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 20:53:56 ] >>703 社内で使ってる(であろう)コードをこんなところに晒して、 ただで済むと思ってるのか? オープンソースじゃないだろうし、上司に知られたらやばいんじゃねーの。
736 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 21:21:08 ] スタックオーバーフローエラーを直してくれた先輩には もう見限られたのか?
737 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 21:58:15 ] >>731 なにが解決してないの?
738 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 22:40:43 ] ほんとプロが作るソースって ゴミクズだよな。 どこもかわらねえなぁ。
739 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 22:48:19 ] え?>>703 の話なら、プロのコードじゃないっしょ。 社内でコンピュータにちょっと詳しい人(事務職とかバイトのお兄ちゃんとか)に アホ課長が「エクセルで計算するのめんどいからお前プログラム書けよ」って 仕方なくしこったんじゃない? どうみてもCで書いたコードを、その人がやめちゃって保守要員がいなくなったので これまたその辺のちょっとコンピュータ詳しい奴にむりくりやらせてるってところでは。 すごいエスパー。昔、エスパドリューはエスパーが身につける特別な装備だと思っていたのを思い出した。
740 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:49:15 ] ふと思ったんだが↓↓ C++では関数が返せる変数の型は1つだけである。 (その型と継承関係によってはその子クラスの型でも返せることもあるが。) ところが、例外処理におけるthrowは関数から外へ任意の型の例外を投げることが可能である。 これをその関数の返り値(戻り値)とみなして プログラミングをするという面白い技法が この世に存在していてもおかしくないのではないか と思ったのだが、誰か知っている人いない? 例外を使ったプログラミングの話をしている訳じゃ無くて あくまでthrowによる例外を戻り値として利用するスタイルってことで。
741 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:55:54 ] テンプレートクラスを使えば戻り値の型なんて自由自在ですよ。 無茶しないでください。
742 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:57:22 ] そのアイデアに「catchされなければ呼出元へ伝播する」という例外の特徴も考慮した? していないならboost::any返せばいいでしょという話だと思う。
743 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:57:35 ] >>740 実用してる奴がいたら絶対に近づきたくないが ネタとしてはおもしろそうだな。 はたして意味のあるプログラムを作ることができるのか・・・
744 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 00:04:54 ] もしうまいことやったとしても、Schemeなんかの継続のきわめて限定的なまねごとになるのではと思う。 どういう形か想像もつかないが。
745 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 00:10:33 ] 継続ねえ。 じゃあお題は例外でC#で言うところのyield()を作る でどうよ。
746 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 00:17:20 ] _ さっそく自分で否定しちまった・・・
747 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 00:39:24 ] >>740 のは面白いな 何か可能性を感じる
748 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 01:27:32 ] variantでいいじゃん 戻り値の型として使いたいものの集合がコンパイル時に決まっていないと 例外使う方法も結局何もできないわけだし
749 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 02:00:23 ] 変態プログラミングの可能性と聞いて
750 名前:703 [2009/06/04(木) 02:02:54 ] >734様 先程、プログラミングを回してみた結果 無事解決しました。 727様のおっしゃるとおり データ解析部分でデータの構造が合致してないことが 原因でした。 もし、お時間があるなら、書き直してくださったプログラムを 見せていただきたいです。
751 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 02:36:54 ] >>740 そういうのはイベント駆動型とかいうやつじゃないか
752 名前:740 mailto:sage [2009/06/04(木) 06:28:37 ] >>741 え? どういうことだい? よく分からないんだが。。。 みんなありがとう。 俺も絶対やらないと思うけど、 >そのアイデアに「catchされなければ呼出元へ伝播する」という例外の特徴も考慮した? 一応考えてる。 boost::anyやvariantは頭をよぎったが忘れることにした。 うーん、むずかしいよねぇ。 少なくとも俺はやらないけど、きっと誰かが何かすごいことを やってくれるんじゃないかと思った。