1 名前:ぬ ◆NUNUK382Dk mailto:sage [2007/12/27(木) 20:32:47 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.45【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1197090562/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
263 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 14:51:41 ] >>255 引っ越す前から見てるんだけど 時間の分解能を定義してないのはなぜよ? sleep とか alam でやれば当然誤差累積だし… 精度とか確度とかって数学の時間に習わなかったか?
264 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 15:09:03 ] 何で偉そうなの?
265 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 15:19:32 ] >>263 些末な問題だから。
266 名前:255 mailto:sage [2008/01/04(金) 17:22:32 ] >>263 引っ越し前からの長期に渡る応援ありがとうございます! 精度は1秒あればOKです。 sleepにせよ、alarmにせよ、 仕掛ける前にtime_tを取ってきて、 それから逆算してやろうかなと思っててわざわざ書きませんでした。 数学は得意です。 自分で微分を発明しました(`・ω・´)シャキーン
267 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 17:39:02 ] ライプニッツもしくはニュートン乙
268 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 18:13:59 ] 凄い奴が書き込んでたんだな。しかも前スレから。
269 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 18:45:21 ] >>263 どこに引っ越したんだ?
270 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 19:44:39 ] いや、>255が他のスレから移動してきただけのことだろ。
271 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 03:46:06 ] 度忘れしてしまったので助けて 引数にポインタをとる関数があるのだが このポインタのアドレスを自動変数のものに書き換えるのはNG このポインタに自動変数を代入するのはOK でいいんだよね
272 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 03:49:55 ] >>271 ごめん、読解できない
273 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 03:53:50 ] 寝ぼけてるから日本語でokになってしまったorz a(int* p) { int local = 10; //適当 p = &local; //NG *p = local; //これはどうだったっけ? }
274 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 03:59:04 ] >>273 //これはどうだっけ? OKだよ。 ってか、なんでこの程度の事が分からん。 //NG これの理由は説明できるか?
275 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 04:00:36 ] >>273 *p = local; //これはどうだったっけ? 問題ない pの指す領域に10の値が代入される pがもつ10の値と、localが持つ10の値は、それぞれ別の領域に格納されている状態になる
276 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 04:01:11 ] よくわからんが混乱してしまった、最近疲れてる予感orz あれだ、auto変数は関数から脱出した瞬間ナイナイされちゃうからな するとポインタpは意味の無いところを示してしまうのでエラーになるんだ
277 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 04:12:09 ] >>274-275 説明ありがとう 今日はもう休もうorz
278 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 08:30:54 ] 文字列から指定の文字列を省いて他の変数へコピー 例えば 文字列が入った変数 MOJI[]="aaabbbccc\0" 指定の文字列="bbb"だと MOJI→他の変数へaaaccc\0をコピー できれば aaabbbccc→ポインタ使ってMOJI自身をaaaccc\0に ってしたいんだけど、どのようにすればいい?
279 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 08:35:58 ] ドゥアブルポイントゥアァァァァ
280 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 08:57:36 ] strstrでbbb探してbbbのに続くバイトをヌル文字まで一文字ずつ前にコピー
281 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:04:56 ] void func(char * a, char const * b) { if (a == NULL || b == NULL || a[0] == '\0' || b[0] == '\0') return; char const * p = strstr(a, b); if (p == NULL) return; char tmp[strlen(a) + 1]; sprintf(tmp, "%.*s%s", p - a, a, p + strlen(b)); strcpy(a, tmp); } char MOJI[] = "aaabbbccc"; char * b = "bbb"; func(MOJI, b); 但し、"aaabbbccc\0"はナンセンスなんで"aaabbbccc"に変更済み
282 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:06:01 ] >一文字ずつ前にコピー 馬鹿がいる。 >char tmp[strlen(a) + 1]; c99使いがいる。 # つーか、一時領域要らないだろw
283 名前:281 mailto:sage [2008/01/05(土) 09:10:17 ] >>282 確かに一時領域要らなかった。 >>278 ってことで、訂正。これでc89でも大丈夫。 void func(char * a, char const * b) { if (a == NULL || b == NULL || a[0] == '\0' || b[0] == '\0') return; char const * p = strstr(a, b); if (p == NULL) return; strcpy(p, p + strlen(b)); }
284 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:13:58 ] >>283 いや、未だc89じゃ通らないし。つーか、char const * pじゃなくてchar * pだろよ。
285 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:28:25 ] >>283 strcpyでコピー範囲が重なってるから動作が未定義になるぞ。
286 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:35:26 ] さらに指定の文字列は複数回出現する可能性も有るから・・・ さらに言えば指定文字列を取り除いた後に前後の文字列がくっついて取り除くべき指定文字列になる可能性も。 ex. aabbcからabを取り除くとabcになって再度abが出現。
287 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:05:44 ] ありがとうstrlen使う発想がなかったから助かりました 実はURLからime.nu/を消したかっただけなんでこんな感じでまとめたみた if(NULL!=strstr(url,"ime.nu/")){ char *buf; buf=strstr(url,"ime.nu/"); url[strlen(url)-strlen(buf)]='\0'; buf+=strlen("ime.nu/"); strcat(url,buf); }
288 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:27:58 ] strcatも未定義動作になるから止めれ。
289 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 11:18:35 ] >>276 ポインタpも関数から脱出した瞬間ナイナイされるので安全。
290 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 11:21:28 ] strcpy()で、前方への移動ができない実装ってあるんかいな。 未定義には違いないけど。
291 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:10:38 ] >>273 >p = &local; //NG これもOKだよ よく考えろ、pもローカル変数だ
292 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:32:16 ] >>291 ほう? void TestFunc(int* p) { int x = 10; p = &x; } int main(int argc, char* argv[]) { int a; TestFunc(&a); printf("%d\n", a); return 0; }
293 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:44:20 ] >>292 そういう話をしてるんじゃないと思うが。
294 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:45:20 ] 何が「ほう?」なんだか。
295 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:52:06 ] >>292 君が何を言いたいのか分からない 要するに、そのコードがどうした? 何か問題でも?
296 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:59:12 ] >>292 void TestFunc(int* p) { int x = 10; p = &x; } int main(int argc, char* argv[]) { int a = 5; TestFunc(&a); printf("%d\n", a); return 0; } 出力結果 5
297 名前:292 mailto:sage [2008/01/05(土) 15:00:49 ] ごめん、俺が悪かった。物凄く勘違いしてたらしい。いじめないでくれ。
298 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:10:58 ] ローカル変数のポインタをリターンするときに注意が必要なんだっけ?
299 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:14:17 ] あれ?戻った先で使おうと思っても残ってる保証がないんぢゃ? > 298
300 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:15:17 ] そうだね。 int* f() { int a = 10; return &a; // NG } 特に構造体とか大きいものを返したいときに、 コストを避けようとしてやってしまう人もいるかも。 素直に値で返すか、引数に格納先のポインタを貰うべし。
301 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:21:00 ] そんな時のための動的確保ですよ > 300
302 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:24:48 ] >>300 動的確保するならauto_ptrですな。 std::auto_ptr<int> f() { return std::auto_ptr<int>( new int(10) ); }
303 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:25:07 ] ヒープ領域に確保されるからdeleteで明示的に削除しない限り開放されないってやつか ただしdelete忘れるとメモリリークが起こるから注意(´・ω・)
304 名前:デフォルトの名無しさん [2008/01/05(土) 18:52:20 ] 初歩的な質問ですいません。ポインタに関して質問です。 二次元配列の動的確保なのですが、 TCHAR hoge[5][260]; のような時に5の部分だけ動的に確保して260の方は固定したいのですが、 TCHAR *hoge[260]; hoge = (TCHAR *)malloc(sizeof(TCHAR)*260*num); のようにすると、"'char *'から'char *[260]'に変換することはできません"とコンパイルエラー吐きます。 TCHAR **hoge; で最初から動的確保を2度行う方法は分かるのですが、片方を固定した場合どのようにすべきでしょうか。
305 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:54:06 ] TCHAR (*hoge)[260];
306 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:54:47 ] hoge = (TCHAR (*)[260])malloc(sizeof(TCHAR)*260*num);
307 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:54:58 ] sizeof(TCHAR)*260 を sizeof(hoge) にするとどうなる?
308 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:55:45 ] あるいは hoge = (TCHAR (*)[260])malloc(sizeof(*hoge)*num);
309 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 19:02:05 ] typedef すると分かりやすいよ。 typedef TCHAR Path[MAX_PATH]; Path *hoge; hoge = (Path *)malloc(sizeof (Path) * num);
310 名前:304 mailto:sage [2008/01/05(土) 19:23:37 ] 即レス感謝です。 >>307 そうすると、後者の場合は戻り値が4になりました。 何故かsizeof(TCHAR)だと1でした。何故2じゃないのだろう・・・。Unicodeじゃないからかな・・・?? >>305-306 のように間接参照演算子を括弧でくくると上手くコンパイルも通り、 for(i = 0 ; i < max ; i++) hoge[i] = "test"; と動作も確認出来ました。 >>309 のようにtypedefのやり方もググって見つけたのですが、 直接的にどうやれば通るか知りたかったもので。。 やはり、typedefの方が分かりやすいですね。
311 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 19:30:57 ] 型宣言の * は間接参照演算子とは別物。
312 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 19:35:03 ] >>310 TCHARはマクロでワイド文字(wchar_t)とマルチバイト文字(char)を切り替える VCならプロパティからUnicode文字セットを使用するようにすればワイド文字になる 後"test";は_T("test");もしくはTEXT("test");って書くように。そうすれば切替の対象になるから。
313 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 21:29:06 ] 構造体にすると見慣れた形になる。 typedef struct { TCHAR str[260]; } Path; Path* hoge = (Path*)malloc(sizeof(Path) * num); 煩雑かな。
314 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:18:19 ] なんて言うかポインタの配列と多次元配列へのポインタを勘違いしている様な希ガス int *p[10]だとint型のポインタが10個あるポインタの配列 int a[10][10]とかの多次元配列へのポインタなら int (*p)[10]
315 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:55:57 ] C言語で何か分かりやすいプログラムはないでしょうか。
316 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:56:34 ] helloworld
317 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:59:19 ] int main(){ return 0; } 多分これが一番分かりやすい
318 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:48:10 ] C++Builder 6でコンパイルした後 printfでテキスト文を表示したいんですけど どうすればいいんでしょうか。
319 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:49:48 ] エスパーが質問に答えるスレ pc11.2ch.net/test/read.cgi/tech/1187922645/
320 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 02:15:16 ] 実行すれば良いんじゃない。
321 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 02:28:04 ] 日本語をコマンドプロンプトや「メモ帳」で表示させたいです。 できれば背景が白い所に分かりやすく表示させたい。 マジレスきぼんぬ。
322 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 02:34:03 ] コマンドプロンプトの配色を「白地に黒文字」に設定
323 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 02:48:13 ] #include <stdlib.h> system( ); で、適当に コマンドの命令だが、 color F0 とか #define color(x) printf("\033[%dm", x + 30); MS使用だったかも知れないが。 system("notepad.exe puni.cpp"); 詳しくは調べて
324 名前:304 mailto:sage [2008/01/06(日) 02:57:35 ] >>314 それを観て何となく納得出来ました。 キャストが初めて観るので、もうちょっと弄ってみます。 レスくれた皆さんありがとうございました。
325 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 05:36:09 ] 動的メモリの解放がいまいちよく判りません。 以下の(A)で生成した snow は、 (B)で問題なく解放されているのでしょうか? void procMain() { Snow ***snow = NULL; int i, j; // 生成 ←(A) snow = new Snow**[10]; for ( i = 0; i < 10; i++ ) { snow[i] = new Snow*[5]; for ( j = 0; j < 5; j++ ) { snow[i][j] = new Snow(); } } // 解放 ←(B) for ( i = 0; i < 10; i++ ) { for ( j = 0; j < 5; j++ ) { delete snow[i][j]; } delete snow[i]; } delete snow; } 下2つの delete が delete[] の様な気もしますが、 判る方がいましたらよろしくお願いします。
326 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 05:49:38 ] >>321 ファイルに出力した後にそのファイルを開けばいい。 fp=fopen("test.txt","r"); fprintf(fp,"hoge"); fclose(fp); system("test.txt");
327 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 06:32:15 ] >>325 new [] 使ってるから delete [] だろうね。 こういうのはややこしくなるから、 フラットな配列にして添え字は掛け算するのがシンプルでいい。 Snow *snow = new Snow[10*5]; for (int i = 0; i < 10; i++ ) for (int j = 0; j < 5; j++ ) snow[i*5+j].xxx(); delete [] snow;
328 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 06:40:43 ] >>321 >>318 でエディションがPersonal以外ならOutputDebugString。イベントタブに出力される
329 名前:325 mailto:sage [2008/01/06(日) 08:55:02 ] >>327 レスありがとうございます。問題が解決しそうです。 どちらの delete でもコンパイルが通っちゃうから自信が持てない・・・
330 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 11:33:30 ] >>315 全然関係ないが、自分が一番最初に見たC++のサンプルはこれだ。 #include <iostream> int main(int argc, char *argv) { std::cout << "Hello World !" << std::endl; return 0; } ついでに、一番最初に聞いたクラスの説明は 猫も人もみな哺乳類なのです だ。
331 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 11:48:57 ] >>330 mainの引数もまともに書かないとは、悪いサンプルだな。
332 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 12:42:49 ] 俺はこれだった・・・ static char _main[] = { 0x81, 0x21, ...., 0x21 } PDPほにゃらら専用とかかいてあった
333 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:01:44 ] 最近Win32APIを使ったソフトを作り始め、色々とサンプルを見て回ってるのですが 多くがひとつの.cppファイルにまとまってるようなコードや、グローバル変数が多いソースで、 それを元にコードを打ち始めたらひとつのファイルに何千行というコードが入り、設定情報 をグローバル変数で共有するような気持ち悪いコードになってしまいました。 Win32を用いたコードでうまくOOPの概念を取り入れて、出来るだけすっきりとしたコードを書きたいのですが、 なにかアドバイスがあればご教授願います。
334 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:08:52 ] APIを直接呼ぶんじゃなくて、APIを包み込むクラスかしてから使う。たとえばファイル関係のクラスを作って外からAPIを見えなくする。
335 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:19:46 ] >>333 Win32API 直叩きじゃなくて、MFCや.NET Framework使ったほうが良いよ。
336 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:21:16 ] MFCや.NET Frameworkみたいなのを作りたいんだろ。
337 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:48:05 ] SDLとかwx使おう是
338 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 15:25:17 ] VCLも愛して
339 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:29:28 ] 暇だしVCLをC++に移植するか
340 名前:333 mailto:sage [2008/01/06(日) 16:30:59 ] 皆さん ご回答ありがとうございます。 どうやらMFCってのがうまくAPIを纏めているようなのでそれを使いたいと思います・・・
341 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:37:27 ] >>339 それ欲しい。是非に
342 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:58:12 ] >>339 文字列クラスには是非sprintfメソッドを
343 名前:デフォルトの名無しさん [2008/01/06(日) 19:06:34 ] C++のSTLであるvector型に関する質問です。 AAA, BBB, CCCという3つのvector型があって、 それらの要素AAA[index], BBB[index], CCC[index] (indexは全て共通の整数)を一括削除したいのですが、 下記のような冗長な構文になってしまいます。 消したい対象DDD, EEE, FFFが増えていくと、プログラムが非常に長くなってしまうのですが、 イテレーターaaa, bbb, cccを極力使用せずにコンパクトに記述する方法は無いでしょうか・ vector<double>::iterator aaa; aaa = AAA.begin(); vector<int>::iterator bbb; bbb = BBB.begin(); vector<string>::iterator ccc; ccc=CCC.begin(); for(int a=0;a<index;a++) { aaa++; bbb++; ccc++; } AAA.erase(aaa); BBB.erase(bbb); CCC.erase(ccc);
344 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:21:25 ] >>343 いや、少なくともfor文はいらなくね?advance使えば? というより、こういうのは思いっきりtemplateの出番だと思うんだが。
345 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:24:03 ] >>343 そもそもデータ構造を struct Hoge { double d; int n; string s; }; vector<Hoge> hoge; とできないの? ちなみにvector<>::iteratorはランダムアクセスできるので AAA.erase(AAA.begin()+index)でOK
346 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:29:51 ] >>344 >>345 ありがとうございます。 既にクラスの階層構造を何段か組んでいるので、これ以上階層化するのは避けたいと思いまして。 最後の1行の場合、indexがint型だからコンパイルエラーにならないでしょうか?
347 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:35:34 ] >>346 RamdomAccessIteratorなら加算がオーバーロードされてるからおk
348 名前:343 mailto:sage [2008/01/06(日) 19:35:53 ] まずはこの方法でためしてみます。 AAA.erase(AAA.begin()+index)
349 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:36:13 ] >>347 重ね重ねありがとうございますm(_ _)m
350 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:52:25 ] #include <stdio.h> から始まる基本関数で 何か表示する物はあるんでしょうか。
351 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:02:22 ] Random Access Iteratorだから AAA.erase( AAA.begin() + index ); BBB.erase( BBB.begin() + index ); CCC.erase( CCC.begin() + index ); でいいんじゃね?
352 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:04:09 ] printfとか簡単な関数でもいいんですが。 コンパイラの設定でブリーダーができません。
353 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:05:49 ] 質問はコミュニケーション言語日本でお願いします。
354 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:08:28 ] これからテンプレートの勉強を始めようと思っているんですが テンプレート:クラスみたいなもん STL:テンプレートのあつまり みたいな認識ってまちがっていますか?
355 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:10:15 ] >>354 間違ってる
356 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:35:34 ] 関数テンプレートの使いどころというか選択についてです 気にしなくて良いレベルなのだと思いますが 引数にaとbを取り、大きな方を返す関数テンプレートがあったとします。 この場合、大きい値を返す関数のint用のものfloat用のもの・・・・といった具合にたくさんの関数を用意するのとでは どちらが良いのでしょうか? ここで関数テンプレートを使うとなんというかもったいないというか処理が無駄に大きく膨らんでいる気がしてならないです 今すぐに想像はできないのですが、ここでいう大小を比べる程度のものでなく、もっと大きなものならば関数テンプレートが有効だとは思います
357 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:36:29 ] 大事なところがorz つまり処理数が多いものならば関数テンプレートを利用した方が良い、などの明確だったりしないまでの決まりのようなものはあるのでしょうか?
358 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:38:53 ] >>356 何で? ぜんぜんもったいなくないと思うけど。 呼び出されてる型のものだけが具体化されるから 効率的だと思うし、実際std::maxテンプレートはあるじゃない。
359 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:40:57 ] >>356 >int用のものfloat用のもの・・・・といった具合にたくさんの関数を用意する これが面倒じゃないと思うならがんばれば?
360 名前:356 mailto:sage [2008/01/06(日) 20:41:07 ] >>358 ありがとうございます そうですよねorzもったいないと感じている自分がおかしくてならないです 積極的に使っていこうとおもいます
361 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:03:26 ] だから、std::max()を使えってば。
362 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:06:46 ] >>361 356は例えばで言ってるだけだろ
363 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:14:07 ] >>360 おかしくないです。出てくるコードの大きさを見積もることは必要なことです。