- 1 名前:デフォルトの名無しさん [2008/02/28(木) 00:01:39 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.49【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1203478421/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 433 名前:430 mailto:sage [2008/03/06(木) 18:04:24 ]
- >>431
やっぱり無理ですか。。 >>432 uc[0],uc[1]みたいに、ポインタではなく配列としてアクセスしたいんですよね。。 なんか根本的に駄目なソース書いてる気がしてきたので、発想を変えてみます。 どうもありがとうございました。
- 434 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:06:06 ]
- 動的に大きさを変えたいならstd::vector使えばいいやん。
- 435 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:06:34 ]
- あ、文字列ならstd::stringな。
- 436 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:09:14 ]
- >>433
添え字演算子はポインタでも使えるけど。
- 437 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:29:09 ]
- >>433
E1[E2] は *((E1) + (E2)) の syntax sugar だ。 uc[0] → *(uc + 0) uc[1] → *(uc + 1)
- 438 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:40:20 ]
- uc[0] → *(uc + 0) → *(0 + uc) → 0[uc]
uc[1] → *(uc + 1) → *(1 + uc) → 1[uc]
- 439 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:43:02 ]
- >>438
さんざん既出 "0123456789ABCDEF"[i] を大昔はやっていた。
- 440 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:44:58 ]
- それは関係ないだろう・・・。
i["0123456789ABCDEF"] ならともかく。
- 441 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:48:59 ]
- >>440
おんなじやんけ
- 442 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 20:49:41 ]
- あま〜〜〜い
- 443 名前:389 mailto:sage [2008/03/06(木) 22:58:20 ]
- みなさん色々とアドバイスありがとうございました。
>>408 通ります。Visual Studio.NET 2003を使ってます。 >>412 _arr = new T*[_max];という感じで確保してます。 delete[] は使ったことないですが、やってみます。 >>414 それは思いつきませんでした。 >>415 その書き方は初めて見ました。 >>416 10年前というか、C言語始めてまだ1ヶ月半なんですが。。。
- 444 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:05:22 ]
- アレだ、「個体進化は系統進化を繰り返す」
- 445 名前:デフォルトの名無しさん [2008/03/06(木) 23:10:44 ]
- 以下のコードでファイルの2番目のバイトだけを
書き換えようとしたんですが 全く何も代わりません #include <stdio.h> int main(void){ FILE *fp; char cIn; char cOut = 'X'; int cnt; fp = fopen("test.txt", "rb+"); fread(&cIn, 1, 1, fp); printf("%c\n", cIn); cnt = fwrite(&cOut, 1, 1, fp); printf("%d\n", cnt); fclose(fp); return 0; } <test.txtの内容↓> ABCDEFG <出力結果↓> A 1 これはどう理解したらいいんでしょうか? BCとVCで試してみました
- 446 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:20:59 ]
- freadしてA読んで、表示した(出力1行目)
fwriteして次のBをXで上書きして、(test.txtの中身変化) 要素数の1が戻ってきて表示(出力2行目) 何が不思議なんだ?
- 447 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:21:31 ]
- >>445
readからwriteに切り替える時、もしくはwriteからreadに切り替える時は 必ず間にfseek()を挟む事。
- 448 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:39:54 ]
- >>445
コンパイル君のぼやき 「freadとfwriteに&使わないで下さいよ。あと、辞書ぐらい買ってくださいよ。 何でもかんでも私に聞かないで下さいよ。なんでもかんでもプリントにしないでくさいよ。 宣言するんだったらまともに宣言してくださいよ。main関数の引数ぐらい使ってくださいよ」
- 449 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:43:29 ]
- Visual C++についてなのですが、
分割コンパイルについていまいちよくわかりません。 main.ccp ClassA.ccp Def.h ClassA.h resource.h と5つあって、 main.ccpではDef.hがインクルード、 ClassA.hでもDef.hがインクルードされ、Classの宣言と、インラインでのメンバの定義、 ClassA.ccpではClassA.hとDef.hがインクルードされています。 また、Def.hではresource.hがインクルードされているほか、#ifdnefを使って重複しないようにしています。 ビルドをすると、C2143構文エラーなど、ものすごい沢山のエラーが出てきてしまいます。 このようにヘッダとソースファイルを分割する場合、どのようにインクルード等をすればよいのでしょうか。
- 450 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:48:48 ]
- > ClassA.ccpではClassA.hとDef.hがインクルードされています。
とりあえずこのDef.hはインクルードしなくていいいような・・・
- 451 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:49:48 ]
- >>449
その文面だけを見る限り、ファイル分割のしかたもインクルードの仕方 も問題ないよ。エラーが出るのはファイルの内容がどこか間違っている とか、何かの定義が足りないとか。
- 452 名前:デフォルトの名無しさん [2008/03/06(木) 23:51:02 ]
- newを使って確保した領域をポインタとして返す関数を作ったんですけど、開放するにはどうすればいいんですか?
個人的には↓の方法でできるような気がするのですが、できるかどうか心配なので教えてください char *func(){ char *buf = new char[1024]; //bufにデータを入れる return buf; } int main(){ char *ptr = func() //ptrであんな処理やこんな処理 delete [] ptr; }
- 453 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:51:16 ]
- 膨大な数のエラーと聞くと、本当に何か書き間違えている気がする。
- 454 名前:デフォルトの名無しさん [2008/03/06(木) 23:55:48 ]
- 初心者も上級者もnew使うならクラスでつかえよな
解放する方法を間違えたり、しなかったりする クラスならデストラクタがする
- 455 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:56:25 ]
- >>452
どうでも話にはなるが、 メイン関数のファンクがカマを彫られたって泣いてるが、 わかっててほられたのかほられてないのか気になる。
- 456 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:56:44 ]
- >>452
それで特に問題はないが、 void func(std::vector<char>& buf) { buf.resize(1024); // buf にデータを入れる } int main() { std::vector<char> buf; func(buf); // buf であんな処理やこんな処理 } とやった方が面倒がないし例外とかあっても確実にメモリが解放されるから安全で便利。
- 457 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:57:05 ]
- >>454
それ・・・なんの冗談?
- 458 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:57:48 ]
- 日本語はおかしいが、要するに RAII ってことじゃね?
- 459 名前:デフォルトの名無しさん [2008/03/06(木) 23:58:43 ]
- string buf
buf.reserve(1024) &buf[0] でも良い
- 460 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:59:30 ]
- それはちょっと・・・。
length 変わらないじゃんか。
- 461 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:59:47 ]
- >>451
あってますか… 1行目初っぱなから Naive_Grid_Class.cpp(4): error C2143: 構文エラー : ';' が 'NaiveGridCtrl::ChkhCtrl' の前にありません。 などと出てきて(下のようなコード) #include "DefHeader.h" #include "Naive_Grid_Class.h" BOOL NaiveGridCtrl::ChkhCtrl(){ return (BOOL)hCtrl; } もう何が何だかさっぱりなんですが…
- 462 名前:デフォルトの名無しさん [2008/03/07(金) 00:01:05 ]
- >>457
class ABC { char *buf; ABC(){確保} ~ABC(){解放} }; main(){ ABC x; } とやれば簡単って事
- 463 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:03:17 ]
- 呼ばれたタイミングだけでnewしたいとは限らんだろうに
- 464 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:04:43 ]
- >>461
class NaiveGridCtrl の最後の ; を忘れているんじゃないか?
- 465 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:08:16 ]
- 質問です。
前から思ってたんだけど、 メモリの解放以外にデストラクタって使い道あるの?
- 466 名前:デフォルトの名無しさん [2008/03/07(金) 00:09:25 ]
- データの残りを書き出す
- 467 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:11:43 ]
- リソースの開放
- 468 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:22:56 ]
- 質問です。
C++で住所録を作っているのですがソートができません。 構造体に名前、住所、年齢、電話番号・・・など 項目ごとに入れるところまではできたのですが、 名前、住所、年齢、電話番号・・・など項目ごとに分かれているので、 名前なら名前だけがソートされてしまい他のはそのまま。 名前をソートしたらその順序で他の項目が付いてくるようにするには、 どうしたらいいのでしょうか。
- 469 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:24:16 ]
- >>468
まず、どうやってソートしてるんだ? そこのプログラムみせてみ
- 470 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:24:24 ]
- >>468
え?なんでそうなるのさ? ソートした順に構造体を並べ替えればいいだけじゃんw
- 471 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:25:22 ]
- 名前だけ入れ替えてるんじゃねw
- 472 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:26:52 ]
- 構造体にしてる意味がねぇw
- 473 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:27:37 ]
- 名前をソートするんじゃなくて、名前のソート順通りに構造体のオブジェクトをソートするんだ。
- 474 名前:デフォルトの名無しさん [2008/03/07(金) 00:33:47 ]
- int i = 1;
while(i <= 10){ fout[i].open("dat$i.dat"); fout[i] << i <<'\n'; i++; } てな感じでデータファイルを10個作りたいのですが、 ""の内のiは変数と見てくれなくて困ってます。 何かいい方法ありませんか??
- 475 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:36:20 ]
- >>474
あたりまえだろw こうすればいい char filename[100]; sprintf( filename, "dat$%d.dat", i ); fout[i].open( filename );
- 476 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:36:50 ]
- >>474 stringstream
- 477 名前:デフォルトの名無しさん [2008/03/07(金) 00:37:46 ]
- >>468
#include <iostream> #include <string> #include <set> using namespace std; class memberlist{ public: string name; string tel; string adress; memberlist(string a, string b,string c){ name=a; tel=b; adress=c;} bool operator<(const memberlist& a)const{ if(name<a.name)return 1;return 0;} }; main(){ set<memberlist> x; x.insert(memberlist("山田太一","030000000","東京都")); x.insert(memberlist("明石家明","077777777","沖縄県")); x.insert(memberlist("佐藤一郎","051111111","大阪府")); set<memberlist>::iterator p; for(p = x.begin(); p!=x.end(); p++){ cout<< p->name <<" "<< p->tel <<" "<< p->adress <<endl; }}
- 478 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 00:41:10 ]
- >>463
どちらにしろ管理クラスに入れとけば デストラクタが勝手に delete してくれるだろ。
- 479 名前:445 mailto:sage [2008/03/07(金) 01:06:00 ]
- みなさんドモドモ
>>447 それそれ。それです。 fseek(fp, 0, SEEK_CUR); が必要みたいなんですが これがわからない。 カレントポジションから0バイト進めるのは 何もしないのと同じなのではないのでしょうか? OSのAPIなどの場合 readしてそのままwriteする事でファイル位置が 自然に進む事が多い気がする訳ですが この仕様はよくわからないです これはC(ライブラリ)の明示された仕様なのでしょうか?
- 480 名前:445 mailto:sage [2008/03/07(金) 01:12:39 ]
- そうそう。あと一つ・・・
fwriteで1バイト書き込めたはずなのに その1バイトはどこへ行ってしまったんでしょうか・・・
- 481 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:13:18 ]
- >>479
APIと違って、バッファリングするのが前提だからfseek()などでバッファを同期を取ることに決められている。
- 482 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:16:55 ]
- >>461
Naive_Grid_Class.h の最後に ; が足りないとか、 BOOLの定義がどこにもないとか。
- 483 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:17:54 ]
- >>480
同期を取っても書き換わらない?
- 484 名前:デフォルトの名無しさん [2008/03/07(金) 01:22:57 ]
- >>475
そのようにすれば、できました! ありがとうございます。 >>476 stringstreamも勉強します。
- 485 名前:445 mailto:sage [2008/03/07(金) 01:49:51 ]
- >>481
なるほど。仕様ですか・・・ 多分FILE構造体の内容とかから必然なのかな? 直感的には把握が難しかったです >>483 fseekはさめば書き換わりますが、 はさんでなくてもfwriteの結果が1というのが 納得いかず・・・ 試しにfread/fwrite/fseek(fp, 0, SEEK_END) というのもやってはみたけれどやはり書き換わらず・・・
- 486 名前:デフォルトの名無しさん [2008/03/07(金) 02:03:11 ]
- int main(){
fin.open("aaa... fout.open("bbb... function(....); } function(.....){ fout << "thanks" <<'\n'; } のようにmain関数でデータファイルを開いて、 function関数の中に開いたファイル持ってきて、書き込みたいんですけど。 どうするのがいいのでしょうか?
- 487 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:11:36 ]
- >>486
ストリームを引数にとればいいんじゃねーの?
- 488 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:23:55 ]
- >>486
ストリームを大域変数にすればいいんじゃねーの?
- 489 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:48:25 ]
- >>486
ストリームを参照で取る constで取ったらあかんよ
- 490 名前:デフォルトの名無しさん [2008/03/07(金) 03:42:36 ]
- >>486
(ofstream& fout[], ifstream& fin[]) ってことですか?? 参照型の配列は許されないとかなるんですが。。。 困り果てた。
- 491 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 03:47:08 ]
- >>490
何故いきなり配列に? >486では一言もそんな話が……
- 492 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 03:50:43 ]
- >>490
常考参照のポインタだろ *&fout
- 493 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 04:00:42 ]
- #include <iostream>
これで通る #include <fstream> void sub(std::fstream* f) { f[0]; } int main() { std::fstream f[10]; sub(f); }
- 494 名前:デフォルトの名無しさん [2008/03/07(金) 04:17:54 ]
- >>493
すいません、素人目からはさっぱりなんですが。。。 fout,fin???どうなったのでしょうか??
- 495 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 04:25:17 ]
- >>494
配列だったらリファレンスではなくポインタで渡せばいいだけの話。
- 496 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 04:28:51 ]
- >>494
あんた>486=>490? >489に答えがあるのに、それをどう曲解したのか>490になって、 >491の質問を無視して>494みたいなこと言われても最早誰も対処できないぞ。
- 497 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 07:12:46 ]
- もらった回答をすっ飛ばす奴の神経がわからんね。
漢字読むのが面倒臭いからって、上の行↑を「もらったをすっばすのがわからんね」と読んで 「うーん、さっぱりわかりません」とか一人で勝手に困ってるようなものだろ。
- 498 名前:デフォルトの名無しさん [2008/03/07(金) 08:49:37 ]
- どっちでもいいといえば どっちでもいいのですが、
現在ゲームを作ってまして、敵の動きを実装するのですが、 C言語で関数のポインタを保持し、タイミングが来たら 保持していた関数を呼び出すのと C++で、基本のクラスを用意し、それから派生してポリモーフィズムで呼び出すのと どちらが良いでしょうか 開発規模は個人なのでそれほど多くならないです、ですがまだ、仕様が決まってないのでなんともいえないのです。 なにが不満かというと Cだと 関数だらけになってしまう C++だと 開発に時間がかかったら保守が大変そうなことです
- 499 名前:デフォルトの名無しさん [2008/03/07(金) 09:01:36 ]
- 作ったことがないが、C++に一票
- 500 名前:デフォルトの名無しさん [2008/03/07(金) 09:03:21 ]
- 迷ったらC++。これ鉄則。
- 501 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 10:54:41 ]
- >>498
Commandパターン or Callback by template
- 502 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:07:04 ]
- くだらない質問で申し訳ありません。
namespace myname{ hogehogehoooge; }; //← namespace mymyname{ hagehagehaaage; } //← コンパイル自体はどっちでも通ったのですが、どっちが本来の文法的に正しいのでしょうか。
- 503 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:25:44 ]
- コンパイラ的には上のセミコロンは空文があるってだけかと
- 504 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:43:35 ]
- >503
なるほど、納得しました。
- 505 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:33:34 ]
- 物凄くくだらない質問なのですが教えてください
double x=1.0; int y = 10000; int z = y * x; この場合z=yって成り立つのでしょうか?
- 506 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:36:02 ]
- >>505
成り立つよ 浮動小数点の誤差がどうとか言う観点だよな?
- 507 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:57:06 ]
- はい、そうです
ありがとうございました
- 508 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:07:28 ]
- メンバに変数しかないクラス(ようするに構造体)を継承して、
それらのポインタをdynamic_castしたい場合、親クラスに virtualな関数を無理やり入れておくしかないのでしょうか?
- 509 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:09:33 ]
- >>508
dynamic_castの意味分かって言ってる?
- 510 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:10:34 ]
- >>508
手っ取り早く済ませたいならそうだね。 手間がかかってもいいなら、たぶん dynamic_cast の必要性を 見直したほうがいいんだろうけど。
- 511 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 15:23:55 ]
- >>509,510
関数テーブルで引数が違う関数をまとめる場合に、 引数型を全部派生にして親クラスのポインタを 受け取るようにしとくと、キャストミスも無くて便利かなと 思ったんですが。 多分設計見直したほうが良いパターンなんでしょうね。
- 512 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 15:49:54 ]
- デストラクタを仮想にしておけば良いんじゃないかな
このパターンで自分もはまったな 引数に<list>をとるか可変長引数とか配列とか色々やり用はあるな
- 513 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 16:23:58 ]
- >>511
つテンプレートの特殊化
- 514 名前:468 [2008/03/07(金) 16:44:37 ]
- www.borujoa.org/upload/source/upload17235.txt
すみません。ド素人のプログラマですが、質問です。 なるべく上のファイルを利用してファイルソートを行いたいのですが、 これからどうすればいいのかわからず手が止まっております。 ソースではなく文章でいいので答えていただけますか? filesortがファイルをソートする関数部分です。 つまりVectorとsortを使って何とかしたいわけですが、 この書き方であると要素ごとでしかソートできません。 もちろん要素だけのソートはできました。 なんかあとちょっと弄ればできそうな気がするんですが、 僕の脳ではどうしようもありません。 どなたかご指導ください。 私的にはsetさえ使えば100人力じゃぁみたいな感じになるので、 setを使いたくありません。その点も含めてよろしくお願いいたします。 あとこのソース見て「ここをこうした方がいいのでは?」と思う人はご指摘ください。 よろしくお願いいたします。勉強になります。 開発環境:CentOS 5 コンパイラ:g++ コンパイルエラー:無し
- 515 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 16:49:15 ]
- クラスについてさっぱりわかってないからこんなこと思うのかも知れませんが、
クラスの公開メンバ関数のアドレスを外部に教えてあげて、 そこから直接クラスの関数にアクセスすることってできますか? 具体的に言うと、Wik32APIでの、ウィンドウプロシージャに、クラスのメンバ関数を使いたいのですが…
- 516 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:06:28 ]
- >514
filesortの中身をちらっと読んだだけ。 ・カンマ区切りを取り出す常套手段は 1:スペース記号、タブ記号をすべて別の文字列で一旦置換 2:カンマ記号をすべてスペースに置換 3:stringstreamに流し込んで >> を使って読み込む 4:1:で入れ替えてたのを元にもどす です。こうした方がいいです。 ・名前を入れ替えたいだけじゃないんですよね? 今のあなたのファイルは「名前データを取り出して、それをベクターに格納。そのベクターをソート」 している「だけ」ですよ。 あきらめてsetを使うか、set相当のものを自分で書くか、 そうでなければsort相当のものを自分で書いてください。 ・fin>>temp この部分は、もし入力ファイル中にスペースがあると困るのではないかと。 nameに「Richard Feynman」って入ったら、Richardで切れますけど、いいんですか? 一行取り出したいならgetlineを使いましょう。
- 517 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:07:45 ]
- >>511
普通の関数は仮想にするなよ つEffective C++ 第38項 ダウンキャストはやめよう つEffective C++ 第39項 というかEffective C++を購入して一読する事を強く勧める。
- 518 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:12:53 ]
- >>515
メンバ関数の実装は、クラスのポインタを引き渡していることが多い。 (thisポインタが引数としてわたっている)。 よって、関数ポインタを取ってきたところで、メンバ以外からマトモに使えません。
- 519 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:31:14 ]
- >>513
511じゃないが参考までにどういう形で実装するのか教えてくれませんか? テンプレートを使った経験がないのでどういう風に使うのか見当がつきません
- 520 名前:452 mailto:sage [2008/03/07(金) 18:21:57 ]
- >>455-456
亀ですがレスthx Winsockと同時に使うから文字列をstd::stringじゃなくてchar*で使ってたんですが、 例外処理さえつければ>>452のコードで大丈夫ですよね あと、>>455のカマを掘られたって言うのがどうことかちょっと気になるんですが・・・
- 521 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 19:07:56 ]
- >>518
やっぱ駄目なんですか。 共通プロシージャ用意してmapしたのを検索する方向で考えてみます。
- 522 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 19:31:55 ]
- >>515
web.archive.org/web/20070810174250/http://techtips.belution.com/ja/vc/0009/
- 523 名前:デフォルトの名無しさん [2008/03/07(金) 19:42:31 ]
- >>521
staticなメンバ関数なら問題ない
- 524 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 19:48:12 ]
- >>523
staticメンバ関数はstaticなメンバしかイジれないじゃん。
- 525 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 20:31:15 ]
- >>524
そうだよ。単にクラスという名前空間に閉じ込め、 protected/privateにできるという程度の意味しかない。 どっかからインスタンスへのポインタを得て、非静的なメンバ関数を呼ぶのが 静的メンバ関数のウィンドウプロシージャの仕事。 >>522
- 526 名前:デフォルトの名無しさん [2008/03/07(金) 20:34:15 ]
- >>524
オブジェクトを作らずに呼び出そうとしてるんだからメンバなんていじる必要ない気が
- 527 名前:デフォルトの名無しさん [2008/03/07(金) 20:42:15 ]
- >>515
サンクという手法でウィンドウプロシージャを書き換えて、ウィンドウハンドルの代わりにthisをスタックに積んでメンバ関数にジャンプさせれば?
- 528 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 20:47:14 ]
- boost::function
- 529 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:35:51 ]
- >>528
どうやってやるのさ
- 530 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:38:29 ]
- >>523-527
あ、オブジェクトではなく、クラスにひも付けすればよいのですね。 有り難うございました!
- 531 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:39:03 ]
- とあるクラスの派生クラス郡の中で一つの派生クラスだけ
関数の引数が異なることになってしまいました こういう場合はどうしたらよいでしょうかorz
- 532 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:51:31 ]
- 設計しなおす
- 533 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:52:10 ]
- >>531
全クラスに引数増やすとか(そしてデフォルト引数をつけておくとか)、 その派生クラスだけ別のメンバ関数で余分の引数を設定しておくとか、 引数の集合を何かクラスにまとめて、上位の概念に置き換えることで引数を共通にするとか。
|

|