1 名前:v(^・^)v [2007/09/26(水) 03:41:13 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 テンプレその他 >>2-15 付近参照 前スレ(実質 part57) C++相談室 part56 pc11.2ch.net/test/read.cgi/tech/1185377587/
2 名前:v(^・^)v mailto:sage [2007/09/26(水) 03:41:45 ] ■基本■ [C++ FAQ] www.parashift.com/c++-faq-lite/ www.bohyoh.com/CandCPP/FAQ/ (日本語) Cとその仕様を比較しながらの解説なので分かりやすい。 ***** 質問の前に必ずこの二つに目を通してください ***** [C/C++ リファレンス] www.cppreference.com/ (英語) www.cppll.jp/cppreference/ (↑の日本語訳だけど最新は反映しない) [禿 Stroustrup] public.research.att.com/~bs/ [C++ International Standard] www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=38110 [JTC1/SC22/WG21 - C++] www.open-std.org/jtc1/sc22/wg21/ ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。 [JIS X3014] www.jisc.go.jp/app/pager?&RKKNP_vJISJISNO=X3014 ISO規格の日本語訳。JIS X 3014:2003はISO/IEC 14882:2003 (E)に対応。
3 名前:v(^・^)v mailto:sage [2007/09/26(水) 03:42:22 ] ■Books■ amazon.com C, C++関連書籍 www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/ The C++ Programming Language ttp://www.amazon.com/exec/obidos/ASIN/0201700735/ ttp://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳) C++ Primer (3rd Edition) ttp://www.amazon.com/exec/obidos/ASIN/0201824701/ ttp://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳) The C++ Standard Library ttp://www.amazon.com/exec/obidos/ASIN/0201379260/ ttp://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳) Effective C++ ttp://www.amazon.com/exec/obidos/ASIN/0201924889/ ttp://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳) More Effective C++ ttp://www.amazon.com/exec/obidos/ASIN/020163371X/ ttp://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳) Exceptional C++ ttp://www.amazon.com/exec/obidos/ASIN/0201615622/ ttp://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳) More Exceptional C++ ttp://www.amazon.com/exec/obidos/ASIN/020170434X/ Exceptional C++ Style ttp://www.amazon.com/exec/obidos/ASIN/0201760428/ ttp://www.amazon.co.jp/exec/obidos/ASIN/4894714663/ (翻訳) C++ Coding Standards ttp://www.amazon.co.jp/exec/obidos/ASIN/0321113586/ ttp://www.amazon.co.jp/exec/obidos/ASIN/4894716860/ (翻訳)
4 名前:v(^・^)v mailto:sage [2007/09/26(水) 03:42:53 ] ■Books(Templateまわり)■ Effective STL www.amazon.com/exec/obidos/ASIN/0201749629/ www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳) Modern C++ Design www.amazon.com/exec/obidos/ASIN/0201704315/ www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳) C++ Templates www.amazon.com/exec/obidos/ASIN/0201734842/ C++ Template Metaprogramming www.amazon.com/exec/obidos/ASIN/0321227255/
5 名前:v(^・^)v mailto:sage [2007/09/26(水) 03:44:42 ] ■Libraries■ [Boost] Boost www.boost.org/ (日本語) www.kmonos.net/alang/boost/ (日本語) shinh.skr.jp/boost/ [標準ライブラリ] SGI-STL www.sgi.com/tech/stl/ STLport stlport.sourceforge.net/ GNU libstdc++ gcc.gnu.org/libstdc++/ Apache STDCXX incubator.apache.org/stdcxx/ STLFilt www.bdsoft.com/tools/stlfilt.html (日本語) www005.upp.so-net.ne.jp/episteme/html/stlprog/ (日本語) www.wakhok.ac.jp/~sumi/stl/ [Loki] sourceforge.net/projects/loki-lib/ LokiPort-MSVC6sp5 fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
6 名前:v(^・^)v mailto:sage [2007/09/26(水) 03:45:13 ] 1 ttp://piza.2ch.net/tech/kako/980/980175292.html 2 ttp://pc.2ch.net/tech/kako/996/996640937.html 3 ttp://pc.2ch.net/tech/kako/1003/10038/1003832761.html 4 ttp://pc.2ch.net/tech/kako/1009/10090/1009071535.html 5 ttp://pc.2ch.net/tech/kako/1014/10142/1014217496.html 6 ttp://pc.2ch.net/tech/kako/1018/10184/1018454705.html 7 ttp://pc.2ch.net/tech/kako/1021/10217/1021787032.html 8 ttp://pc3.2ch.net/tech/kako/1025/10250/1025010364.html 9 ttp://pc3.2ch.net/tech/kako/1027/10273/1027347982.html 10 ttp://pc3.2ch.net/tech/kako/1029/10293/1029315669.html 11 ttp://pc3.2ch.net/tech/kako/1032/10323/1032345774.html 12 ttp://pc3.2ch.net/tech/kako/1035/10350/1035005882.html 13 ttp://pc3.2ch.net/tech/kako/1038/10380/1038031395.html 14 ttp://pc5.2ch.net/tech/kako/1041/10413/1041328679.html 15 ttp://pc5.2ch.net/tech/kako/1043/10436/1043605481.html 16 ttp://pc5.2ch.net/tech/kako/1045/10457/1045746245.html 17 ttp://pc5.2ch.net/tech/kako/1047/10475/1047560042.html 18 ttp://pc5.2ch.net/tech/kako/1050/10501/1050177746.html 19 ttp://pc5.2ch.net/tech/kako/1052/10526/1052625846.html 20 ttp://pc5.2ch.net/tech/kako/1055/10551/1055162298.html 21 ttp://pc5.2ch.net/tech/kako/1057/10575/1057580107.html 22 ttp://pc5.2ch.net/tech/kako/1060/10603/1060361082.html 23 ttp://pc5.2ch.net/tech/kako/1062/10626/1062690663.html 24 ttp://pc5.2ch.net/tech/kako/1066/10665/1066546387.html 25 ttp://pc5.2ch.net/tech/kako/1067/10679/1067949669.html 26 ttp://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子) 27 ttp://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子) 28 ttp://pc5.2ch.net/test/read.cgi/tech/1077985164/ 29 ttp://pc5.2ch.net/test/read.cgi/tech/1082047479/ 30 ttp://pc5.2ch.net/test/read.cgi/tech/1084030770/
7 名前:デフォルトの名無しさん mailto:age [2007/09/26(水) 03:57:30 ] _____ (すた☆らき)  ̄ ̄\| ̄ www.freewebs.com/premiumtv/?X3/?STV=%E3%82%89%E3%81%8D+%E3%81%99%E3%81%9F
8 名前:v(^・^)v mailto:sage [2007/09/26(水) 04:08:11 ] 31 ttp://pc5.2ch.net/test/read.cgi/tech/1086185282/ 32 ttp://pc5.2ch.net/test/read.cgi/tech/1088236078/ 33 ttp://pc5.2ch.net/test/read.cgi/tech/1090180012/ 34 ttp://pc5.2ch.net/test/read.cgi/tech/1092018643/ 35 ttp://pc5.2ch.net/test/read.cgi/tech/1093958200/ 36 ttp://pc5.2ch.net/test/read.cgi/tech/1096304546/ 37 ttp://pc5.2ch.net/test/read.cgi/tech/1098543578/ 38 ttp://pc5.2ch.net/test/read.cgi/tech/1101473340/ 39 ttp://pc5.2ch.net/test/read.cgi/tech/1106466303/ 39(実質40) ttp://pc8.2ch.net/test/read.cgi/tech/1106527792/ 40(実質41) ttp://pc8.2ch.net/test/read.cgi/tech/1113408957/ 41(実質42) ttp://pc8.2ch.net/test/read.cgi/tech/1120190961/ 43 ttp://pc8.2ch.net/test/read.cgi/tech/1124113879/ 44 ttp://pc8.2ch.net/test/read.cgi/tech/1128512737/ 45 ttp://pc8.2ch.net/test/read.cgi/tech/1133007604/ 46 ttp://pc8.2ch.net/test/read.cgi/tech/1136690107/ 47 ttp://pc8.2ch.net/test/read.cgi/tech/1139931895/ 48 ttp://pc8.2ch.net/test/read.cgi/tech/1142423595/ 49 ttp://pc8.2ch.net/test/read.cgi/tech/1146185570/ 50 ttp://pc8.2ch.net/test/read.cgi/tech/1149427282/ 51 ttp://pc8.2ch.net/test/read.cgi/tech/1153079297/ 52 ttp://pc8.2ch.net/test/read.cgi/tech/1156525695/ 53 ttp://pc11.2ch.net/test/read.cgi/tech/1159340181/ 54 ttp://pc11.2ch.net/test/read.cgi/tech/1162215248/ 55 ttp://pc11.2ch.net/test/read.cgi/tech/1164951094/ 56 ttp://pc11.2ch.net/test/read.cgi/tech/1170343752/ 56 (実質57) ttp://pc11.2ch.net/test/read.cgi/tech/1170343752/
9 名前:v(^・^)v mailto:sage [2007/09/26(水) 04:08:43 ] ■関連スレ■ 多すぎ。とりあえずスレタイ C++ で検索して。 以下、スレタイで見付からなさそうな関連スレ。 Boostを語れゴラァ part4 pc11.2ch.net/test/read.cgi/tech/1175663346/l50 GCCについて part7 pc11.2ch.net/test/read.cgi/tech/1145357824/l50 Cygwin + MinGW + GCC 相談室 Part 3 pc11.2ch.net/test/read.cgi/tech/1177944767/l50
10 名前:v(^・^)v mailto:sage [2007/09/26(水) 04:10:15 ] テンプレ終了。 ISO のリンクが "301 Moved permanently" だったんで更新しといた。
11 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 04:38:06 ] ぉぉ。すごい。乙です。
12 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 04:38:46 ] 注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく スレの雰囲気を崩しかねないのでお黙り下さい。 また質問者は回答者に知識を披露する場を与える貴重な存在なので、 質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。 忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、 その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると 判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。
13 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 07:30:25 ] STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
14 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 07:31:09 ] C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。
15 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 10:56:04 ] やっぱり貼られるんだなこれ
16 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 11:17:02 ] 地鎮祭が済んだな乙
17 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 11:35:06 ] そこまでがテンプレだからな。
18 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 12:00:46 ] stlとかboost使いまくったら通常は1M程度で住むものが 10M超えたりするんでしょうか?
19 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 12:07:37 ] 「通常」の定義がわからん
20 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 12:15:08 ] それでは、よくある「クラスと継承が使えるbetter Cとして書いたC++のコード」を「通常」だと想定して答えて下さい 今作ってるものがboostをヴァリヴァリに使っているので それと比較すればどれぐらいバイナリサイズは肥大するのかがちょっと気になります
21 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 12:25:32 ] バイナリサイズよりコンパイル時間の肥大が気になる。
22 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 12:28:21 ] 通常、増える場合と減る場合、そして変わらない場合があります。
23 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 12:33:21 ] 全スレ >827 名前:デフォルトの名無しさん 投稿日:2007/09/22(土) 23:20:47 >emacsでc++開発をするときの環境に関するサイトってないでしょうか? flymake d.hatena.ne.jp/pyopyopyo/20070715/p1
24 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 19:15:43 ] >>22 何そのトートロジー
25 名前:デフォルトの名無しさん [2007/09/26(水) 20:27:10 ] int data[10] ={10,20,30,40,50,60,70,80,-999} このようなint配列があります 配列の内容を実行結果のように表示するプログラムを作りなさい -999になれば処理を終了します ポインタを固定して表示させる処理とポインタを変化させて表示させる処理の2つ作成しなさい この内容がわからないので教えて下さいお願い致します
26 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 20:31:33 ] なんだマルチか
27 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 21:52:11 ] スレ建て乙
28 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:22:22 ] >>1 おつかれ >>10 GJ! 有用なサイトを手っ取り早く見つける方法... それはテンプレを見ることだ。
29 名前:デフォルトの名無しさん [2007/09/27(木) 00:22:33 ] int *p = data; int i = 0; while(*p++ != 999) std::cout << *p << std::endl; while(*(p + i) != 999) std::cout << *(p + i) << std::endl;
30 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:55:53 ] 999ではなく-999 2つ目のループ前にpを初期化しないといけない
31 名前:デフォルトの名無しさん [2007/09/27(木) 09:48:49 ] C++で書かれた、正規表現処理クラスみたいなものってありませんか?
32 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 10:00:16 ] boost/random.hpp
33 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 10:00:50 ] ミスった。 boost/regex.hpp
34 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 10:25:06 ] !?
35 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 10:57:19 ] double a[3000][3000]; て定義すると蹴られるんだけど、なんでかわかる人いますか?
36 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:09:59 ] 環境は?
37 名前:デフォルトの名無しさん [2007/09/27(木) 11:14:19 ] VC6のSDKでウィンドウを持ったクラスの継承がしたいです。 Hoge1クラス:メインウィンドウになるクラス Hoge2クラス:継承元となるウィンドウを持ったクラス Hoge3クラス:Hoge2クラスを継承したクラスでHoge1ウィンドウのボタンを押したときに表示されるウィンドウを持ったクラス Hoge2クラスはWinProcをstaticでクラス内に入れています。クラスの登録やウィンドウを生成する関数はprivateとして存在します。 Hoge3クラスも同じような構成です。 で、Hoge3クラスで不用なメッセージ処理はHoge2のウィンドウクラスに回してやりたいのですが、 その方法がいまいちわかりません。手順・・がいまいちです。 Hoge3クラスの登録をする前に、Hoge2クラスのウィンドウを登録する必要があると思い、 WNDCLASSEXを使ってウィンドウの登録をする?と思いきや、横取りするHoge2にあるプロシージャとかも指定しないといけないわけですよね? でもこの段階だと、Hoge2クラスの存在すら誰も知らないわけで・・・この辺りがよくわかりません。 ボタンのスーパークラス化と同じようなイメージでいるのですが、ボタンの場合は ウィンドウズが予めその存在を認識しているからGetClassInfoExを使って情報を取得する ことができますが、自作ウィンドウクラスの場合はそれができなくて・・・
38 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:16:33 ] >>35 俺のエスパー能力が、環境がx86なPCであると言っている。 さらに、かなりの確率でWindowsであると言っている。 さらに、俺のエスパー能力はこう言っている。 コンパイラ「スタック足りねーよボケッ!」 ttp://www.google.com/search?&q=8+*+3000+*+3000+byte
39 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 12:15:58 ] >>35 配列が大きすぎてスタック領域が足りてない。と思われる。 巨大な配列を宣言するときは new するか static にするべき
40 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 12:28:43 ] 俺の環境ではgcc 3.4やvc2005でも文句言われないんだけど… そのかわり実行時にスタックオーバーフロー そういうオプションでもあるの?
41 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 12:34:20 ] >>35 誰に蹴られるって?
42 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 12:38:23 ] >>41 金色のファルコ
43 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 21:58:29 ] >>39 必要ないのに無駄にnewなんか使うなよ。 どうしてもSTLは使いこなせないってことなら話は別だが。
44 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 21:59:28 ] >>37 1. 静的メンバ関数となっているHoge2のウィンドウプロシージャから 仮想関数にしたウィンドウプロシージャを呼ぶようにして、 Hoge3でそれをオーバーライドする。 Hoge3では新たなウィンドウクラスを登録しない。 2. Hoge2のWinProcをprotectedにして、Hoge3のウィンドウプロシージャでは、 DefWindowProcの代わりにHoge2::WinProcを呼ぶようにする。 Hoge3では新たなウィンドウクラスを登録する必要がある。 俺は1をよくやる。2こそはスーパークラス化だな。 ウィンドウプロシージャの仮想関数化はここが参考になる。 techtips.belution.com/ja/vc/0009/ www.google.com/search?q=cache:http://techtips.belution.com/ja/vc/0009/
45 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 00:17:35 ] >>43 スタックじゃサイズ足らないって理由だけでnewすんのもSTL使うのも大差ないだろ
46 名前:37 [2007/09/28(金) 01:30:59 ] >>44 そこは何度も見てるのですが・・・。そこに書いてあるクラスは、 それを継承させると簡単にサブクラス化できたり元に戻せたりする クラスってことですよね?
47 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 02:05:57 ] >>37 >で、Hoge3クラスで不用なメッセージ処理はHoge2のウィンドウクラスに回してやりたいのですが、 >その方法がいまいちわかりません。手順・・がいまいちです。 Hoge3 クラスは Hoge2 クラスを継承してるんだから、ただ単に継承元クラスのメンバ関数を呼ぶだけでいいのでは ムダに難しいこと考えてない? Windows に登録するウィンドウクラスと C++ のクラスが一致してる必要はないよ C++ のクラスを継承してるからってウィンドウクラスをスーパークラス化したりサブクラス化したりする必要はない
48 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 07:38:08 ] インナークラスっておまいら普通に使ってる?
49 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 08:10:15 ] pimplの形でなら使ってるよ
50 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 09:32:02 ] >>45 大差なくはない。vector使え。 例外安全な上に組込配列よりずっと便利だ。
51 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 10:11:22 ] 2 4 16 256 65536 4294967296 * sizeof(double) = 8589934592b = 8192MB
52 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 10:15:48 ] そこまでいったら流石にメモリマップドファイル使う
53 名前:37 [2007/09/28(金) 10:45:46 ] >>47 「ウィンドウ作成データとして、CWinBase クラスの派生クラス CxxxWnd オブジェクトを指定することを忘れないで下さい。」 が、何を指しているのかわからないです。どこにCxxxWnd オブジェクトを指定するのでしょう?
54 名前:37 [2007/09/28(金) 10:50:39 ] WNDCLASSEXを登録するとき、サンプルではBaseWnd::WindowMapProcを指定 しろとあるけど、指定するものを自分自身のWinProcを指定してやり Attachを呼べばいいのかな?
55 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 11:00:24 ] >>53 それは、CreateWindowExの最後の引数。 CxxxWnd wnd; CreateWindowEx(..., &wnd); こういう感じ。CreateWindow(Ex)の引数は WM_CREATEまたはWM_NCCRAETEでCRATESTRUCTとして全て参照できる。 いつもこうしなければならないだから、 CreateWindowExもクラスのメンバにしてこの処理はしばしば隠蔽される。 そろそろスレ違いが近付いているぞ。
56 名前:37 [2007/09/28(金) 11:29:40 ] >>55 今そこ調べてました・・・ ttp://nomina.petit-archives.mydns.jp/tests/old/gecko012/nmnConsoleControl.cpp ttp://www7a.biglobe.ne.jp/~lshen/EternalWindows/WinBase/Window/Window08.html >>そろそろスレ違いが近付いているぞ。 もうすこし付き合ってください・・ その最後の引数に&wndを渡して自身のメンバ変数や関数にアクセス する場合、が微妙です。 WM_CREATEで LPCREATESTRUCT lpcs = (LPCREATESTRUCT)lParam というところはOKです。ここから自分のメンバにアクセスする方法が いまいちです。
57 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 11:33:18 ] 死ね
58 名前:37 [2007/09/28(金) 11:33:38 ] static Hoge3* pWnd = NULL; pWnd = (Hoge3*)(((CREATESTRUCT*)lp)->lpCreateParams); こんな感じか?な?
59 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 11:36:24 ] CxxxWnd *wnd = (CxxxWnd*)lpcs->lpCreateParams;
60 名前:37 [2007/09/28(金) 11:37:44 ] >>55 できますた。ありがとうございます! あとは54なんですが・・・これがまた・・・orz
61 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 11:38:16 ] 死ね
62 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 11:42:22 ] >>60 Win32API質問箱 Build57 pc11.2ch.net/test/read.cgi/tech/1189255282/
63 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 12:11:35 ] >>58 そこでstaticはやめとけ。 >>60 Hoge2::WinProcに相当するのが、44の指したページで言うCWndBase::WindowMapProc。
64 名前:37 [2007/09/28(金) 12:38:27 ] class Hoge:public CWndBase public: BOOL InitInstance( HINSTANCE hInstance ); private: //オーバーライドしたWndProc static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); }; 使うとき、 Hoge hoge; hoge.InitInstance(hInstance); InitInstanceの中ではウィンドウの登録、作成をする WNDCLASSEX wcex; : wcex.lpfnWndProc = (WNDPROC)BaseWnd::WindowMapProc;//WndProc; : RegisterClassEx(&wcex); で、CreateWindowする。最後の引数はthisを渡す。 こうすると、メッセージは、まずWindowMapProcで処理されて、 BaseWndのWndProcへ飛んできます。が、オーバーライドした自分のWndProcには飛んでこない です。CreateWindow後のAttachとか呼んでみたのですが、変わらずです。 なんか、おしい気がするのですが、ぜんぜんですかね?
65 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 12:43:20 ] なぜ static が付いてる? それでオーバーライドになってると思ってるのか?
66 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 12:48:32 ] >>64 44のページを良く見ろ。 WindowMapProcはstaticで、WndProcはvirtualだ。 静的メンバ関数で多態的なオーバーライドは不可能だ。
67 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 12:49:18 ] お前らの優しさに嫉妬
68 名前:37 [2007/09/28(金) 13:29:59 ] あ、static付いてる。コールバックはstatic付けることで解決、なんての ばかり気にしてたので、普通につけちゃいました。 で、取ったらコンパイラ エラー C2555が出て、「そんなの聞いてませんが何か?」 とか思いつつ、調べること数分、どうにかメッセージを受信するとこまで できたようです。 今は、慣れてないのにいろんなことやってしまった(気でいる)ので、 これから1つ1つ整理して、ちゃんとしたものを作っていきます。 みなさまありがとうございました。
69 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 14:22:21 ] やれやれ ┐(´ー`)┌
70 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 14:33:43 ] でさ、なんでこの話題がC++スレで?
71 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 15:26:42 ] 相手する低脳がいるから
72 名前:デフォルトの名無しさん [2007/09/29(土) 08:31:08 ] class A{ int a[10]; public: }
73 名前:デフォルトの名無しさん [2007/09/29(土) 08:34:44 ] 途中で書いてしまいました失礼しました class A{ int a[10]; public: int *get_a(){return a;} } int main(){ int *p; p = get_a(); for(int i = 0; i < 10; i++){ p[i] = ... ... = p[i]; } return 0; } このようなコードってカプセル化を壊してますか?
74 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 08:40:45 ] >>73 うん。少し。
75 名前:73 [2007/09/29(土) 08:45:15 ] やはり配列のポインタを返すというのはまずいのでしょうか?
76 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 08:48:46 ] >>75 うん。少し。
77 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 10:23:23 ] >>78 うん。少し。
78 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 12:03:52 ] やはり>>77 さんは早漏なのでしょうか?
79 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 12:37:28 ] 早漏は経験をつめば治ります。めげずに頑張りましょう。
80 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 17:31:27 ] こんな感じにしちゃえば? int get_a( int i ){return a[i];}
81 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 21:08:11 ] 代入は?
82 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 21:12:06 ] >>81 int& get_a(int i) { return a[i]; } int get_a(int i) const { return a[i]; }
83 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 21:22:13 ] effective C++読めよー。
84 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 21:44:16 ] っていうか言語以前の問題だろ。 っっていうか全部ネタだろ。
85 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 23:56:29 ] なんで誰も内部ハンドルを返すのは云々って言ってあげないのか
86 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 23:58:29 ] >>85 流れ嫁よ
87 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 08:55:39 ] hoge.hの中で class hoge { public: virtual double CalcF1(Double_t r) const throw(std::exception); } hoge.cxxの中で double hoge::CalcdF1dr(Double_t r) const throw(std::exception) { } としてるんだけど、g++でcompileしようとすると src/hoge.cxx: In member function 'virtual double hoge::CalcdF1dr(Double_t) const': src/hoge.cxx:87: error: expected primary-expression before ';' token と怒られます。どこが書き方間違ってるんでしょうか。
88 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 08:56:33 ] あ、ごめん。 class hoge { public: virtual double CalcdF1dr(Double_t r) const throw(std::exception); } でした。
89 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 08:57:57 ] あ、ごめん。勘違い。 スルーして下さい。
90 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 18:33:43 ] VC2003で作られた 静的なlibは、 VC2005でリンクすることは不可能なんですか?
91 名前:デフォルトの名無しさん [2007/09/30(日) 20:19:13 ] クラスの内側で定義したクラステンプレートを特殊化する、 class X { template<typename T> class Y {}; template<> class Y<int> {}; }; のようなコードは、VC++(2003/2005)ではコンパイルできますが、g++3/4では error: explicit specialization in non-namespace scope ‘class X’ というエラー になってしまいます。 Y<int>をXの中ではなく、名前空間スコープで template<> class X::Y<int> {}; と書けばg++でもVC++でも問題なく特殊化できることは知っているのですが、 なんとかg++で、特殊化されたクラスの定義をXの中に書く方法はないでしょうか? Y<T>とY<int>の定義が離れた場所にあると、コードが読みにくいと思うのです。 boost(特にmpl)の使用は歓迎です。 よろしくおねがいします。
92 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 20:27:59 ] >>89 クラス末尾にセミコロンがありませんでした。ごめんなさい。 とちゃんと書こうYO!
93 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 20:42:48 ] >>91 定義位置を近づけたいなら、両方クラス外に書けばいいんじゃね?
94 名前:91 [2007/09/30(日) 20:45:33 ] >>93 ああ、たしかにそうですね。他に案がなければそうしたいとおもいます。 ただ、Y<T>とY<int>を両方クラス内に書けると、宣言と定義の位置も離れない(定義だけになる)ので、 より読みやすいと思っています。 というわけで、引き続きお願いします。
95 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 20:54:22 ] >>91 規格ではネストされたクラス内での明示的特殊化は禁止されているけど 部分特殊化はOKなので、 class X { template <typename T, class U = void> class Y {}; template <typename T> class Y< T , typename boost::enable_if< typename boost::is_same< T, int> > > {}; }; のようにenable_ifとis_sameを使って書くといいっぽい(初心者スレから一部拝借w) VCでコンパイル可能なのはmsの独自拡張でgccの方が正しいとのこと
96 名前:91 [2007/09/30(日) 20:57:38 ] なお、メンバ関数テンプレートで同様のエラーをくらう件については (下記の2行めがエラーになる)、 class X { template<typename T> void foo(T x) {} template<> void foo<int>(int x) {} // error }; 下記方法でごまかしています。 #include <boost/type.hpp> class X { void foo_(int x, boost::type<int>) { /* specialized */ } template<typename T> void foo_(T x, ...) {} public: template<typename T> void foo(T x) { foo_(x, boost::type<T>()) ;} };
97 名前:91 mailto:sage [2007/09/30(日) 20:59:12 ] >>95 部分特殊化はOKだったんですか。気づきませんでした。 早速試してみます。どうもありがとう〜!!
98 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 21:00:46 ] >>91 私はC++初心者ですが、>>93 さんと同意見です。 >>95 さんの言うようにgccの方が正しい(つまり規格どおりということですよね)ならば、 なおさらそう思います。 それに、Xクラスの定義を見たいときには、むしろYは外にあった方が見やすいのではないでしょうか?
99 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 21:06:58 ] ちなみに関数テンプレでもこの手は使えるようだ この手法も名前があったと思うけど思い出せない 使うなら適当にローカルなメタ関数を専用の名前空間に自作して階層を浅くする工夫が必要だね 使ってればわかるけど、凄く見にくくなるから
100 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 21:10:12 ] あ、::type付けわすれた…