- 1 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 15:14:51 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.46【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1198755167/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 976 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 22:22:42 ]
- >>975
<<演算子をオーバーロードしろよ
- 977 名前:975 mailto:sage [2008/02/04(月) 22:31:18 ]
- すみません、<<は確かにそうでした。
条件式に単独で入れたときにvalの値でboolに変換されるようには出来ませんか?
- 978 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 22:34:31 ]
- bool ClassA::isPlus(){ return val > 0; }
とかじゃだめなん?
- 979 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 22:34:45 ]
- bool operator !()constと operator void *()constあたりを定義するのが常套手段だが。
- 980 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 22:39:46 ]
- operator bool をオーバーロードするだけじゃダメなのか?
- 981 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 22:40:27 ]
- intへの暗黙のキャストが許せるなら、それでもいい。
- 982 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 22:54:31 ]
- >>980
訳わかんねえことがいっぱい起こるから、やめといた方がいい。
- 983 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 23:00:47 ]
- 0xではこの辺の暗黙的型変換を禁止できるようになるんだよな、たしか。
- 984 名前:975 mailto:sage [2008/02/04(月) 23:19:06 ]
- 変換関数を定義しておけば良いんですね。
そういうものがあるというのは読んだんですが用途まで考えていませんでした…。 >>980の方法で良さそうです。 >>979のoperator void*でも上手くいきましたが 条件式の中身はboolにキャストされると思っていたんですが、 void*でも動くのはどういう意味なのか教えてもらえないでしょうか。
- 985 名前:975 mailto:sage [2008/02/04(月) 23:23:45 ]
- すみません、>>981以降リロードしてませんでした…。
- 986 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 23:26:16 ]
- if( x )はif( x!=0 )と等価、というか。
void *m = malloc(len); if( m ) { return m; } else { abort(); } みたいな処理ってやったことないの?
- 987 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 23:27:42 ]
- >>984
982でも書いたが、operator boolのオーバーロードはやめとけ。 ClassA a, b; int c = a + b; int d = abs(a); みたいのがコンパイル通っちまう。 >>979 が常道。
- 988 名前:975 mailto:sage [2008/02/05(火) 00:02:09 ]
- わかってきました。
条件式に入るクラスは数値かポインタへの変換を持っていれば良くて、 operator void*を定義しておけばそちらに変換されると。 でintからboolよりもintからポインタの方が予期せぬ動作が少ないのでvoid*を使うべきと。 知識が足りてなくてレス読みつつググったりして勉強になりました。 どうもありがとうございました。
- 989 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:03:21 ]
- >>984
ポインタはboolへの暗黙の変換がある。 cinもそれを利用してif(cin)を可能にしている。 その方法が>>979の方式だ。 boolへの暗黙の変換はおすすめできない。
- 990 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:03:40 ]
- >>987
bool 値として使用したいのならそんなもんじゃね? そうでないならそもそも演算子オーバーロードで解決すべきじゃないと思う。
- 991 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:23:35 ]
- boostは徹底してて、関数ポインタとか返してくるし(w
- 992 名前:デフォルトの名無しさん [2008/02/05(火) 00:31:24 ]
- int a = 123;
bool b = !!a;
- 993 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:33:44 ]
- >>991
すごー。でもそのくらいの方が有り難い。 まえに operator bool()を定義してて、コンパイラがブッ壊れたかと思った。
- 994 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:44:42 ]
- >>991
つまり、関数呼べちゃうってことか? メンバポインタとかの方が良くね?
- 995 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:48:01 ]
- ・ ・ ・ ・ ・ ・ ・ ・
メンバ関数ポインタだぜ? そうそう呼べはしないとおもうが。
- 996 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:49:29 ]
- なんだ。メンバ関数ポインタか。
ならいいが。
- 997 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:19:14 ]
- 【初心者歓迎】C/C++室 Ver.48【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1202141921/
- 998 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:20:11 ]
- 【初心者歓迎】C/C++室 Ver.48【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1202141921/
- 999 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:22:10 ]
- さーて来週のスレは?
- 1000 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:24:41 ]
- お疲れ様でした。次週も環境依存コードをお楽しみください。
- 1001 名前:1001 [Over 1000 Thread]
- このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
|

|