1 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:25:51 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.63【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1231499251/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
496 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:09:23 ] 処理中のものは一時的に別のmapとかに保存しておいて、処理が終了したらlistに積むとか
497 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:09:26 ] 処理の軽さがあらかじめわかるなら あの、あれ、なんていったっけ、常にソートされるコンテナ、 それ。
498 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:21:09 ] 時刻をキーにしてstd::set使えばよさげだね 重さ?シラネ
499 名前:デフォルトの名無しさん [2009/03/23(月) 23:35:58 ] どうも自分の環境だと、30万件を越えたあたりからマシンが応答なくなります。 30万件のダブルリンクを、全然内容に変化がないのに1秒とかの間に何度も何度も 回ってて、何度も何度も処理後1時間以内のエントリの数を数えてます。 この処理を減らせれば、もっといけそうな気がする。 メモリ消費自体は、構造体が16バイトなので、100万件でも16MBとかの消費のはず なんですがね、、、
500 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:41:11 ] それは「新しい要求が1秒とかの間に何度も何度も」来てるからじゃろ? そして「受け付けた全要求」、つまりここでは30万件を 要求が来るたびに「回って、処理が終わってから1時間たってないものの数をカウントして」る からじゃろ? 仕様どおりじゃないのかな?
501 名前:デフォルトの名無しさん [2009/03/23(月) 23:48:29 ] >>500 そうですね。 負荷テストやっとこうと思って、別プロセスからガンガン要求なげてみたんです。 1秒間に10000件とかです。負荷が高いときは要求を拒否しますといったほうがいいんですかね。 そうなると、要求を出す側のプログラムも変更しなくちゃいけないのがいやなんですけどね。。
502 名前:デフォルトの名無しさん [2009/03/23(月) 23:52:40 ] >>497-498 ありがとうございます。 でもC++は手元のコンパイラが対応してなくてですね、、強く要求すれば購入してもらえるかも しれないんですが、なんとかCでやりたいと思ってます。 自分でstd::setとかコンテナとか実装すればいいのかもしれないですが、 常にソートされるコンテナって重そうな感じがするし、、、、
503 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:53:31 ] 全体的に仕様がおかしい気がするけど そういう仕様なら仕方ないのであきらめましょう。 プログラマは仕様について意見することはできても 仕様を変える力はありません。しようがないのです。なんちて・・・ コマネチ!
504 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:08:07 ] >>501 それは仕事でやってるの?
505 名前:デフォルトの名無しさん [2009/03/24(火) 00:11:58 ] >>501 そうです。でも売り物じゃなくて、社内のデータ管理ソフト用の処理を書かされてます。
506 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:22:25 ] すげー社内システムだな。
507 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:27:16 ] >>492 の方法なら一番軽いと思うんだけどな。処理が終了してからlistとかdequeに積めばいいだけだし。 全探索の力業を少しでも軽くしたいなら要求が来るたびに調べるんじゃなくて、少しの誤差を許容して 調べるのは一秒に1回までとすれば1/10000まで軽くなると思う。
508 名前:デフォルトの名無しさん [2009/03/24(火) 00:30:19 ] 結構大きな会社で、ストレージ管理ソフトも自社製のがあるんですが、 そういうのは管理できる人を手配するのが大変らしいです、、、
509 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:30:50 ] STLは偉大だなぁ。ちゃんと処理時間についても言及されてる。
510 名前:デフォルトの名無しさん [2009/03/24(火) 00:40:32 ] >>507 そうですね。 じゃあ、ダブルリンクには処理が終了してないものを入れておくことにして、終了したものは dequeで管理する、そしてダブルリンクの全探索は1秒に1回にしてやります。 過去1時間以内に処理した要求の数は、ダブルリンク上の処理中のものの数+deque上のもの。 これで実装してみます。 明日の朝までにできるかな。
511 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:41:40 ] STLは元々Adaに組み込もうと研究されてたようですね C++にtemplate機能が付け加えられたのに目を付けた Stephanov(だっけ)がC++に移植したのが初めだとか
512 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 07:02:35 ] template に関してだけど、オーバーロードにするか、templateを書くかといつも 使いどころに迷ってしまう、皆さんはどういう基準で使い分けていますか?
513 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 07:23:59 ] オーバーロードで済むならオーバーロード。 テンプレートが必要な時だけテンプレート。
514 名前:デフォルトの名無しさん [2009/03/24(火) 08:09:13 ] 時間がないとき以外は全部テンプレート。自分が成長するため。
515 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 08:30:05 ] 演算子のオーバーロードについて質問があります。STLのIteratorみたいに、 List<int> *list = new List<int>(); llist.push_back(1); llist.push_back(2); for(Iterator* iter = (ListIterator<int>*)list->iterator(); iter->hasNext(); iter++){ printf("%d ", (*iter)); } このような書き方ができるようにソースコードを書きたいのですがうまくいきません。 以下が(全部載せるには少し長いので)自分のソースの抜粋です。 class Iterator{ public: //省略 virtual bool hasNext() = 0; virtual Iterator<Type> &next() = 0; virtual Iterator<Type> &operator++() = 0; virtual Type& operator*() = 0; }; template <class Type> class ListIterator : Iterator<Type>{ public: //省略 Iterator<Type>& operator++ (int dummy){ return next();: } Type& operator*(){ return value;//現在イテレータが指しているセルの内容 } } このように定義したものを上のように実行すると、4227856のような数字が連続して表示されてしまいます。また、for文のところで実行時エラーが出ます。 どう書き直せばよいでしょうか……。 (素直にSTL使えって話なんですがね……OTL)
516 名前:デフォルトの名無しさん [2009/03/24(火) 08:41:56 ] >>515 よく1回のカキコにおさめたな。
517 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 08:48:26 ] >>516 載せるところ選ぶのに苦労しました……。 重要そうなところだけ抜粋してます。 テンプレートクラスのListは自前で教科書読みながら基本的な機能は実装してみました。 こんなことしてるのは、単に興味とステップアップのためなんですが。 ちなみに学生ではありますが、ただの(へたれ)日曜?プログラマです。 サンプルコードまねるだけでろくなソフトも作れませんが……OTL (っとこんなことはどうでもいいですよね……)
518 名前:デフォルトの名無しさん [2009/03/24(火) 10:05:31 ] あるサイトを参考にして、下記のような半角全角変換関数を 作成したのですが、試しに適当にint型の変数を入れて 動かそうとすると下記のようなエラーが出ます。 参考サイトにあるものをほぼそのまま使用しており、 修正したところはcase文の中の変換する文字のみです。 参考サイトには、そのまま使用できるようなことが 書いてあったのですが、何が間違っているのか教えてください。
519 名前:デフォルトの名無しさん [2009/03/24(火) 10:06:52 ] int han2zen(char *str) { char *buf, *p, *ptr; buf=(char *)calloc(strlen(str)*2+1,sizeof(char)); for(ptr=str,p=buf; *ptr!='0\'; *ptr++){ switch((int)*ptr){ case '0': strcpy(p,"0");p+=2;break; case '1': strcpy(p,"1");p+=2;break; case '2': strcpy(p,"2");p+=2;break; case '3': strcpy(p,"3");p+=2;break; case '4': strcpy(p,"4");p+=2;break; case '5': strcpy(p,"5");p+=2;break; case '6': strcpy(p,"6");p+=2;break; case '7': strcpy(p,"7");p+=2;break; case '8': strcpy(p,"8");p+=2;break; case '9': strcpy(p,"9");p+=2;break; case default: *p=*ptr; p++; *p='\0'; break; } } strcpy(str,buf); free(buf); return(0);
520 名前:デフォルトの名無しさん [2009/03/24(火) 10:07:57 ] (1849) : error C2001: 定数が 2 行目に続いています。 (1849) : error C2015: 定数の文字数が多すぎます。 (1850) : error C2143: 構文エラー : ';' が 'switch' の前にありません。 (1850) : error C2143: 構文エラー : ')' が 'switch' の前にありません。 (1861) : error C2059: 構文エラー : 'default' (1868) : error C2040: 'strcpy' : 'int ()' は 'char *(char *,const char *)' と間接操作のレベルが異なります。 (1869) : error C2371: 'free' : 再定義されています。異なる基本型です。 C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\\include\malloc.h(123) : 'free' の宣言を確認してください。 (1871) : error C2059: 構文エラー : 'return' (1872) : error C2059: 構文エラー : '}'
521 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 10:10:37 ] >>515 printf("%d ", (**iter)); 正直混乱するのでiteratorで多態はやめた方がいいんじゃない? Listの実装でListIteratorを返すようにして for(ListIterator iter = list->iterator(); iter->hasNext(); iter++){ printf("%d ", (*iter)); }
522 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 11:12:35 ] >>519 '0\' '\0' case default: default;
523 名前:515 mailto:sage [2009/03/24(火) 12:20:00 ] >>521 レスありがとうございます。 >printf("%d ", (**iter) なんでうまくいかないんだろうと4時間くらい混乱してました。 List::iterator()でnewしてポインタを返す仕様でした……(もちろん管理してdeleteもする)。 とりあえず一つ前のソースコードは(**iter)で動きました! どうもです。 ポインタ渡してるんだから*が一個多く必要なのは当然。初歩的なミスだったとは恥ずかしい。 初めて演算子のオーバーロードなんてやるからそれが間違ってるのかと思い込んでました。 List::iterator()は、 ListIterator<Type> iterator(){ return ListIterator<Type>(this); } 現在のソースコードはポインタじゃなくてこんな感じにしてみました。 >多態はやめたほうが…… Iteratorクラスを作って継承するのはやめる方向で書き直してみます。どうせ自分しか使わないですし。 アドバイスありがとうございました。 スレ汚し失礼しました。
524 名前:デフォルトの名無しさん [2009/03/24(火) 13:59:10 ] 518,519,520です。 ありがとうございます。 おかげで動くようにはなったのですが、 期待する値を得ることができません。 下記のような値が返ってきてしまいます。 何がいけないんでしょうか? INPUT OUTPUT HAN2ZEN("9") NULL HAN2ZEN("99") 結果なし HAN2ZEN("999") 9 HAN2ZEN("9999") 結果なし HAN2ZEN("99999") 9 HAN2ZEN("999999") 99 HAN2ZEN("9999999") 999 HAN2ZEN("99999999") 99 HAN2ZEN("999999999") 999 HAN2ZEN("9999999999") 9999
525 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 14:24:58 ] >>524 int main() { char s[100]; for (int i = 1; i <= 10; i++) { s[0] = '\0'; for (int j = 0; j < i; j++) { strcat(s, "9"); } printf("HAN2ZEN(\"%s\")", s); han2zen(s); printf("%s\n", s); } return 0; } これでちゃんと出たけどな?
526 名前:デフォルトの名無しさん [2009/03/24(火) 14:43:54 ] ありがとうございました。han2zen関数の使用方法を間違って、 例えばprintf("%s\n", han2zen(s));のように使用していたため 変な値が返ってきていただけでした。助かりました。
527 名前:デフォルトの名無しさん [2009/03/24(火) 16:19:10 ] VS2005を使っているのですが、iostreamをインクルードすると error C2913:明示的な特殊化; 'std:iterator_traits'はクラス テンプレートの特殊化ではありません。 をはじめ100以上のエラーがでます。 xutilityというファイルが原因のようですが、特に書き換え等行っていません。 プログラムは別のPC(同じOS、同じVS)に移すとエラーを吐きません。 アドバイスを御願いします。
528 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 16:37:17 ] VSを入れ直す
529 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 17:06:31 ] ところで、 C言語のスレッド関係の関数をC++のクラスでとりあえずラップ・カプセル化っぽくした簡単な自作ソースコードがあるんですけど、 需要ありますか? 機能はかなり限定されてますけど、Windows(ほぼWin32 APIのみのVC++)用、確かLinux用(pthread。簡素です)と両方あります。 これ見られたら、ダメ出しをたくさんくらいそうだけど。
530 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:13:44 ] 需要ありますか?じゃなくて ダメ出しして欲しいんで見てくれませんか?だろ boost::threadがあるしな
531 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:16:28 ] >>530 だよな いらないよな
532 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:20:01 ] えー。マルチスレッドなprintfとか欲しいよ。 文字単位でスレッド分割して最終的に正しいストリームを形成するみたいな。 どう?
533 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:21:22 ] >>529 最近ねたが無いからうpれ
534 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:40:22 ] 土下座して頼むならうpってあげてもいいんですが。
535 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:05:54 ] >>530 ,531,533 それが本音で、ネタのためにも、うpしたかったと>>529 が申しております。 よかったら見てやってくださいとのこと。 多分、これだ。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8998.zip
536 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:31:51 ] >>535 このスレ見るものが、怪しげなzipファイルを踏むとは思えないんだけど
537 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:44:13 ] オレは踏んだ そしてどちらかの環境(Win,Linux)しか使わないなら必要ないと判断した
538 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:59:44 ] svg形式を解析・出力するようなオープンなライブラリないのかな なけりゃ自力で作るんだが・・・完全準拠って大変だな・・・ 改めてブラウザって大変なんだなって思うわ
539 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 21:13:22 ] ないわけないやろが
540 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:34:19 ] >>538 オープンの意味による。 GPLならいっぱいあるが、Non-GPLでC/C++から使えるオープンソース実装は多分ないと思う。 ていうかあるなら俺に教えてくれ。 OpenVGもNon-GPLで非プロプライエタリな実装が見あたらないんだよ。 リファレンス実装をGPLで配布するとかマジやめて欲しい。
541 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:42:20 ] ハノイの塔を解くプログラムを書いたのですが、結果が正しいのかわかりません。 どなたか検証していただけないでしょうか? ↓ソース kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8999.c ちなみに、円盤の個数が5までなら正しいのを確認してます。
542 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:14:36 ] 5個まで正しいなら、6個目も正しいのは簡単にわかるよ。 なぜなら、6個目の解法は 5個目までの解法+一番下を動かす+5個目までの解法(ただし最初とは使う柱が違う) だから。 ちなみに7個目の解法は 6個目までの解法+一番下を動かす+6個目までの解法(ただし最初とは使う柱が違う) 以下同様。ハノイは簡単。
543 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:19:59 ] >>541 危なっかしい警告が出てるので、まず潰したほうがいい。 結果はこれと比べとき。 #include <stdio.h> int Solve(int num, int step, int from, int to, int tmp) { if (num) { step = Solve(num-1, step, from, tmp, to); printf("%d 手目: %d -> %d\n", step++, from, to); step = Solve(num-1, step, tmp, to, from); } return step; } int main(void) { int num; printf("円盤の個数を入力して下さい: "); scanf("%d", &num); Solve(num, 1, 0, 2, 1); return 0; }
544 名前:デフォルトの名無しさん [2009/03/25(水) 08:23:34 ] for (list<int>::iterator i = lists.begin(); i != lists.end(); ++i) { if (iが何かの条件を満たしているとき) lists.erase(i); } とやれば、リストをたどって、条件を満たしている要素全部を消していくことができますか?
545 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 08:46:11 ] remove_if
546 名前:デフォルトの名無しさん [2009/03/25(水) 09:02:16 ] RemoveとEraseはなにが違うんですか?
547 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 10:27:35 ] >>546 あなたのお使いのライブラリの仕様によります。 STLについてなら、RemoveもEraseもありませんのでremove, eraseのことだと思いますのでそれについては以下に。 removeは対象の要素が指定したキーと一致した場合のみ削除しますが、eraseは一致を確認することなく削除します。 但し、removeは対象となるコンテナがlistの場合のみ使用できます。 尚、algorythmにあるremoveは、対象要素を移動しますがメモリの後始末はしないので注意が必要です。
548 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 10:34:29 ] >>541 円盤の番号を上から1〜n、手順を1から数えるとして、手順mに動かす円盤は手順mを 二進表現したときの最初の1が下から数えて何番目に出現するか数えればいい。 例えば、100手目に動かす円盤を知るには先ず100の二進表現を得ればいい。 これが110100なので、下から3番目が1と判る。つまり、上から3番目の円盤を動かすと知れる。 要は、再帰は必須ではない。
549 名前:デフォルトの名無しさん [2009/03/25(水) 12:19:05 ] >>547 ありがとうございます。VC++9を使ってます。 listの中を1周しながら、条件に合うものをerase()しているのですが、1周する途中で デバッグエラーに引っかかります。何が間違ってるのでしょうか?
550 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 12:26:29 ] 要素の追加、削除した後のiteratorって保障されないんじゃないの? remove_ifとかした後で、いらない要素をまとめてeraseすればいいんじゃないだろうか
551 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 12:35:17 ] >>544 erase() に渡されたイテレータは無効にり、無効なイテレータは インクリメントできない(未定義動作になる)。 www.google.co.jp/search?q=%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF+%E7%84%A1%E5%8A%B9
552 名前:541 mailto:sage [2009/03/25(水) 17:06:53 ] お礼が遅くなってすみません。 大丈夫みたいですね。どうもありがとうございました。
553 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 17:32:34 ] list< int >::iterator i = lists.begin(); while ( i != lists.end() ) { i = lists.erase( i ); // erase()は削除した要素の次の要素を指すイテレータを返す } こんなかな。っていうか、STLでは自前のループはなるべく書かない。
554 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 17:54:06 ] C++で変数(例えばdouble型)に#INFを代入する方法はないでしょうか? 出来れば環境依存しない方法を探しています。
555 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 17:59:03 ] 依存無しは無理だろ 浮動小数にIEEE754を使うことが定められてるわけじゃないから INFなんてものが存在するとは限らないし
556 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 18:40:44 ] >>554 std::numeric_limits<double> infinity() 存在するかどうかのテストも用意されてたはず。
557 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 18:41:42 ] >>554 環境依存だろうけど x=1e+1000;
558 名前:デフォルトの名無しさん [2009/03/25(水) 21:59:14 ] Windows(Vistaです)のC++でsleep(秒)を使おうと思っているのですが、どのヘッダを インクルードすればよいのかわかりません。結局 #include <windows.h> をインクルードして、 Sleep(ミリ秒); を使ってますが、Windowsでsleep()はつかえるのでしょうか?
559 名前:sage [2009/03/25(水) 21:59:39 ] すみません。古い技術で恐縮ですが、 VB6用のDLLをVC++で作成するとき、 VB6で使用するタイプライブラリはどのように作成するのでしょうか?
560 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:21:08 ] >>558 それしかありません
561 名前:デフォルトの名無しさん [2009/03/25(水) 22:53:14 ] >>560 わかりました。 ありがとうございます。
562 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 00:48:06 ] VC6.0でビットマップAの特定座標にビットマップBをコピーして、 それらを一切表示せずにビットマップCとして保存したいのですが、 BitBltという関数を用いれば可能なのでしょうか?
563 名前:デフォルトの名無しさん [2009/03/26(木) 01:26:02 ] C++で、名前なし名前空間に関数を書いた場合とただのスタティック関数は、機能面から 考えたら同じと思っていいですか? そのファイル内からだけ使えるという点で。
564 名前:デフォルトの名無しさん [2009/03/26(木) 01:37:41 ] おい、誰か答えろや。 答えんかい!
565 名前:デフォルトの名無しさん [2009/03/26(木) 02:43:02 ] 関数使わなくても 座標計算してあとは合成すればいい まああれだ
566 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 03:26:22 ] >>564 ちょっとだけ違う
567 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 03:54:26 ] そのへんは週刊 名前空間・創刊号に詳しく載ってるから買ってくるといい 確か初回は特製boost::binderがついてくるはず
568 名前:デフォルトの名無しさん [2009/03/26(木) 05:27:59 ] >>566-567 ほんとに役に立たないスレだな。 もっとちゃんと答えろ。 こっちは眠いのを我慢してレス待ってんだから。 早くしてくれや。
569 名前:デフォルトの名無しさん [2009/03/26(木) 06:28:20 ] あー眠い眠い。早く教えてくれ。寝ちまうぞ。
570 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 06:55:12 ] いいよ。
571 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 06:57:10 ] おやすみー
572 名前:デフォルトの名無しさん [2009/03/26(木) 07:04:18 ] >>570-571 はやく助けろや。 こっちは急いでんだわ。
573 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:15:17 ] おぅ。わかった。すぐに答えるからちょっと待ってろ
574 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:21:27 ] >>563 リンケージが違う。といっても、どのみちファイル外からはアクセスできないんで あまり実用上の違いはない。 「リンケージが違う」ことを意識して、わざと違いの出るサンプルを作るとこんな感じ。 他にもあるかもしれないけどね。 template<void (*)()> int t() { return 0; } namespace { void an() {} } static void st() {} int main() { return t<an>(); } // t<st> はコンパイルエラー
575 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:28:56 ] もっとわかりやすく説明しろよカスども
576 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 08:39:31 ] あたまだいじょうぶでちゅかあ? ことばわかりまちゅかあ?
577 名前:デフォルトの名無しさん [2009/03/26(木) 08:44:02 ] わからないでちゅ・・・
578 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 08:56:46 ] 意味もなく盛り上げてんじゃね〜よ
579 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 09:10:06 ] >>574 ダメだよこういう時は嘘を教えなきゃ。
580 名前:デフォルトの名無しさん [2009/03/26(木) 09:47:06 ] 浅く寝ちまったよ。 >>574 ありがとョ。でもVC++2008だと、t<st>でもt<an>でも両方とも コンパイルできたけど?ほかの環境でも試したほうがいいのかな? >>579 うるせーやつだな。
581 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 11:50:38 ] >>580 > ほかの環境でも試したほうがいいのかな? 試さなくていいよ。
582 名前:デフォルトの名無しさん [2009/03/26(木) 12:45:35 ] >>581 そうか、まあまずリンケージから理解するかと思って調べたらこんなの出てきたんだけど、 ほんとかどうかついでに教えてよ。 C 言語と C++ 言語では const キーワードを使うことで定数を宣言することができます。 例えば const int cardmax=13; のように使用できます。これが単一のモジュールだけで 使われるのならば問題がないのですが、複数のモジュールにわたって使われる場合、 C言語と C++ 言語では constのリンケージが違うので、注意が必要です。具体的には C言語では外部リンケージをもち、C++ 言語では内部リンケージを持ちます。つまり C 言語では他のモジュールから使用する場合、そのモジュール内で extern const int cardmax; と宣言すればこの定数は使用可能ですが、C++ 言語では同じようにしても参照する ことはできません。C++ 言語で外部から const オブジェクトを参照したい場合には、 定数を定義するときに、 extern const int cardmax=13; のように定義する必要があります。
583 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 12:49:13 ] >>582 正しいよ。 ちなみにCでconstで内部リンケージを持たせるなら static const cardmax=13; ってやる。
584 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 15:14:19 ] >>580 へぇ VC++ だと通るのか。独自拡張じゃないかな? /Za でエラーになるかも。 ちなみに Cygwin の gcc 3.4.4 ではこんなエラーになる。 : In function `int main()': :4: error: `st' is not a valid template argument :4: error: no matching function for call to `t()'
585 名前:デフォルトの名無しさん [2009/03/26(木) 22:18:37 ] >>584 /Zaのつけ方を教えて。
586 名前:デフォルトの名無しさん [2009/03/26(木) 22:36:10 ] >>585 つけ方がわかったんで、つけてもう一回コンパイルしてみたけど、それでも 結果は同じ。どっちでも通るけどな。
587 名前:デフォルトの名無しさん [2009/03/27(金) 02:07:55 ] まったくお前らのせいで昼夜逆転しちゃったよ。 はやく解クレや。 今はカップ麺にお湯入れたんで、完成待ち。 やっぱ夜はいいな、静かでな。
588 名前:デフォルトの名無しさん [2009/03/27(金) 13:02:08 ] なんかカキコが減っちゃったな。 俺のせいかな。 悪かったよ。もう消えるわ。 じゃあな。
589 名前:デフォルトの名無しさん [2009/03/27(金) 23:33:13 ] なんか難しい方のスレで聞いちゃったみたいだからこっちで聞きなおしますね。 それにしても初心者スレって沢山あってどこで聞けばいいか良く解らないけどここにする。 C言語は上から順番に処理されるんだよね。 そうすると、割り込むみたいなことは許されないんだよね? 例えばfor文のループ中にキーを押したらそのときのtimeを取れるみたいなのは無理? for( ) ・・・・・・・・・ if(getchar 見たいなのじゃなくて、for文でゲームみたいなの動かしたいんだけど、 その途中でどんな途中でもtimeが取れるみたいなことは出来ないですか?
590 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:50:42 ] >>589 _beginthreadex
591 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 00:04:52 ] つ _kbhit()
592 名前:589 [2009/03/28(土) 01:09:16 ] ありがとうございます。
593 名前:デフォルトの名無しさん [2009/03/28(土) 05:28:17 ] >>589 スレッドを作るんだよ。2つのスレッドを作ってそれぞれにHello world出力 させてみろ。話はそれからだ。 あとは環境を書けや。WindowsかLinuxか。
594 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 07:06:38 ] スレッド信者ウゼ
595 名前:デフォルトの名無しさん [2009/03/28(土) 07:30:11 ] >>594 信者もなにも、基本だろ。 クソな書き込みするくれーなら、意味のあること書いてミロ。
596 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 07:57:08 ] _kbhit()にしてもどんなタイミングでも実行させるならマルチスレッドでやるしかないだろう