1 名前:デフォルトの名無しさん [2009/09/17(木) 22:22:59 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.67【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1247937958/l50 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
2 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 23:01:03 ] ○ >>1 乙 もうお前に用はない く|)へ 〉 ヽ○ノ  ̄ ̄7 ヘ/ / ノ | / | /
3 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 00:41:55 ] ◤◥◣ ▂ ◢◤▀〓▲▂▐ ▂ ▪ ▂▄▅▆▇■▀▀〓◣▬ ▪ ■…. ▍ ▼ ◥◣▼ .▂▅■▀ ▪ ■ ▂¨ ∵▃ ▪ ・ ▀▍ ◢◤ ▅ ▐◣ ◢◤ ◢▇█▀ ¨▂▄▅▆▇██■■〓◥◣▄▂ ▍ ▅ ◢■ ▍ ■ ▂▅██▅▆▇██■〓▀▀ ◥◣ ∴ ▪ . ▐ ▂ ▐◣ ▐▅▇███████▀ ▪ ∴ ….▅ ■ ◥◣ ▀◣▂ ▀◥▅▆▇████████▆▃▂ ▪ ■▂▄▃▄▂ ◥◣▄▂▄▅▀ ■ ¨ ▀▀▀■▀▀▀ ▪ ■ ∴‥ ↑はUnicode対応のブラウザで見るとコーヒーを吹くプーさんが表示されますが、これを 1.正しく画面に表示する 2.テキストファイルに出力し、再入力してから画面に表示してもやはり正しく表示される 3.出力されたテキストファイルをUnicode対応のテキストエディタやブラウザで表示しても正しく表示される ようにするC++のコードを書いてください。 多くの人にはとても難しいです。
4 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 01:13:38 ] MFC使えば簡単だけど C++標準でやろうとすると死ぬな。
5 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 01:21:12 ] またあやふやなコトを…
6 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 04:23:11 ] たとえAAであってもディズニーキャラはモザイク掛けといた方がよくね?
7 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:10:11 ] wchar_t s[] = L"ハート♡髑髏☠DANGER☣"; wcout << s << endl; wcout.clear(); wcout.imbue( locale( "Japanese" ) ); wcout << s << endl; んー。動かん。 codepad.org/60naQUV5
8 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:32:14 ] バイナリモードでやったら
9 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 16:00:44 ] long double を使う必要が出たため、 Turbo C++(2005?)で long double を double へ変換するDLLを作成し、 VC2008EEで呼び出そうとしていたところ、関数コール部分で以下のエラーが出ました。 Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention. dumpbin でチェックしたところ、関数名はあっているようでしたし、 defファイルを作成し、lib /machine:i386 /def: で lib を作ってリンクもしています。 何が問題なのでしょうか?
10 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 16:34:37 ] download.microsoft.com/download/e/3/c/e3c1a451-1882-49fe-86a8-e25680f6c46c/JIS_Unicode_guide.pdf ↑を読んでみたけど、マイクロソフトでさえUnicodeを正しく表示できないのにワロタ。
11 名前:9 mailto:sage [2009/09/18(金) 18:00:13 ] 追記です。 libを使用せず、LoadLibrary()を使用しても同じ結果でした。
12 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 18:12:55 ] とりあえず呼び出し規約は一致させてるのか
13 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 18:32:41 ] 指定したURLのHPのソースコードを取ってくることは可能でしょうか?
14 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 18:36:59 ] >>13 HTMLソースって意味なら環境依存の方法で可能なことが多い。
15 名前:9 mailto:sage [2009/09/18(金) 18:38:19 ] >>12 libリンクの方だと__stdcallではVCの方でリンクエラーが出ていました。 そのため、libリンク方式の方は指定していません。 LoadLibrary()の方は__stdcallを指定しています。
16 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 18:38:32 ] >>14 C++標準関数でありませんか? 調べると、.NETやMFCなら沢山出てくるのですが・・・
17 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 18:39:39 ] >>13 ブラウザがやってることと同じことをやるだけだな。 HTTPプロトコルに従った手順(テキストベースの送受信)でやりとりして得るだけの話だし
18 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 18:41:43 ] >>16 言語レベルでそこまでの範囲を想定してないから、標準では無い。 非標準で、その手の面倒をみてくれるライブラリは あるかもね
19 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 18:46:01 ] >>15 呼び出し側の 宣言が狂っているんじゃないの? lib式) プロトタイプ宣言の呼び出し規約定義はちゃんとあわせてるのか? (マンゲリング抑制も含めて LoadLib式) GetProcAddress() の戻りをどうキャストして使ってるんだ?
20 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 18:52:50 ] >>17 ,18 ありがとうございます。 もう少し調べてみます
21 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 18:53:58 ] >>16 C/C++標準は、socket(ネットワーク)を扱えるものは何一つ無い。 どこぞでも書いたが、(Win環境ならwgetを入手して) system("wget")が一番楽かもしれない。
22 名前:9 mailto:sage [2009/09/18(金) 19:28:43 ] >>19 双方同じヘッダをインクルードして使用しています。 ヘッダ #ifdef _USRDLL # define __PORT __declspec(dllexport) /* DLLを作る場合 */ #else # define __PORT __declspec(dllimport) /* DLLを使う場合 */ #endif #ifdef __cplusplus extern "C" { #endif __PORT double __stdcall LONGDOUBLE( void* p ); #ifdef __cplusplus } #endif LoadLib式は以下の通りです。 HMODULE h; FARPROC p; double (*func)( void* ); h = LoadLibrary( "longdouble.dll" ); p = GetProcAddress( h, "LONGDOUBLE" ); func = (double (*)(void*))p; 変数 = (int)func( long doubleが入っているメモリへのアドレス ); FreeLibrary( h );
23 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:31:53 ] VC++2008と32bitXPを使っているのですが、 64bitのOSにするとint等のビット幅以外になにか変わるところはあるんでしょうか
24 名前:9 mailto:sage [2009/09/18(金) 19:35:40 ] >>19 >マンゲリング抑制 とは何のことですか? ググってみましたがよくわかりませんでした。
25 名前:9 mailto:sage [2009/09/18(金) 19:41:18 ] >>19 double (__stdcall *func)( void* ); に変更したところ、問題なく動作しました。 ありがとうございました。
26 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 21:26:23 ] >>23 むしろ、intの大きさは変わらない。 変わるのはポインタ・ハンドル・L/WPARAM・LRESULT・size_tなどの大きさ。 これにより、アドレス空間1プロセス4GB(うちユーザが使えるのは2-3GB)という制限が大幅に緩和される。 あと、x86→x86-64だとレジスタの増加で高速化が期待できる。 >>24 extern "C"のこと。
27 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 21:34:55 ] >>26 あれ、そうなんですか。もう少しよく調べてみます ありがとうございました
28 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 21:56:11 ] 多数派はLP64なのにVC++だけは、なぜかLLP64
29 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 21:59:00 ] Windowsプログラミングだと、LRESULT,WPRAM,LPARAMが64bitになっていてはまる場合もある。 LPARAMをlongに代入できないとか。
30 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 22:13:44 ] GetWindowLongPtr使うと警告出されたりとか
31 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 22:19:51 ] >>30 それは/Wp64をオフにすればいいだけ。 もう64ビット対象にばんばんビルドして確かめてくれってことで、 VC++ 2008では/Wp64オフが初期設定となっているから、それにならえばいい。
32 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 06:41:02 ] 入出力マニュピレータ endlとか なんで引数どころか()まで省略できるの?
33 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 07:21:21 ] >>32 それらを書くか書かないかで意味が違う。省略できているわけじゃない。
34 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 09:48:11 ] 詳しく
35 名前:デフォルトの名無しさん [2009/09/19(土) 10:46:35 ] int a,b,c,d,e;の中にランダムに整数が入ってるものとします。 この5つの中でいちばん数が小さい変数を見つけるにはどうやるのが良いでしょうか?
36 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 11:00:13 ] >>35 4回比較する
37 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 13:16:18 ] 暗黙のアップキャストを抑制して、明示的にキャストした場合のみ アップキャスト可能にすることって可能でしょうか?
38 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 13:23:29 ] 暗黙のアップキャストを抑制する必要性自体がほとんどないし、できなかったと思う。 具体的に必要な場面を示せばなんか方法はあるかもしれない。
39 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 13:32:40 ] >>37 private 継承して BaseType& Base() を用意するとか?
40 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:17:48 ] class A; class B : A; func(A); func(B); templateの絡みで、こんな感じに親クラスと派生クラスを オーバーロードした同名関数で処理したいのですが。
41 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:27:49 ] >>40 ん?それなら普通にオーバーロードで済まないか? A, B の例でいいから、今できてるところまでひととおりのコードを貼ってみるといいかもね。
42 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:36:15 ] class Hoge {・・・}; int main(void) { Hoge h; h; // ※ return 0; } ※をエラーに(できればコンパイル時)することはできますか?
43 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:50:46 ] 0除算でもしてみては
44 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:53:30 ] >>42 無理
45 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 15:15:22 ] C/C++は評価した値を捨てる事ができる言語だからな Pascalとは違う
46 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 15:22:16 ] >>41 オーバーロードが用意されていればキャストされないのですね。 すみませんでした。
47 名前:ぅゅ ◆e6.oHu1j.o mailto:sage [2009/09/19(土) 23:39:19 ] >>42 Cだとそういうの警告でるよ エラーだすの実行時でいいならboolオペレーターっていうのがある operator bool(){ printf("era-"); return 0; }
48 名前:ぅゅ ◆e6.oHu1j.o mailto:sage [2009/09/19(土) 23:40:47 ] あ、すまん勘違い それじゃboolオペレーターの実行されねーや
49 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 23:42:18 ] >>47 その警告に C と C++ は関係ない。 その operator bool を Hoge に宣言しても h; では呼び出されない。
50 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 02:04:05 ] >>42 のコードって規格ではどういう動作するように決められてるの?無視するだけ?
51 名前:ぅゅ ◆e6.oHu1j.o mailto:sage [2009/09/20(日) 08:03:51 ] >>47borlandでは.cのとき警告
52 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 10:15:49 ] Carクラスがあるとします Car car1; とオブジェクトを作成するのと Car* pCar; pCar=new Car; とメモリを確保するのと、どういう短所長所があるのでしょうか?
53 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 10:27:03 ] 前者はスコープを抜けるときにオブジェクトが自動的に削除される。そして生成廃棄が速い 後者は不要なオブジェクトを手動でdeleteする必要がある。そして生成廃棄が遅い。 なのに、なぜ後者が有るかというと、生成と廃棄のタイミングを自由に操作できるから。
54 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 10:31:24 ] >>53 なるほど、ありがとうございます グローバル変数ほど長く使いたくない場合に使うんですね
55 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 13:05:14 ] templateの>>を離して書くのがだるいんですがこれはもうどうしようもないんですか?
56 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 13:37:34 ] そんなやならdifineでも使ってみては
57 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 13:42:31 ] >>55 c++0xで正式に実装される。 VC8でもできるから、できるコンパイラを使えばいい。
58 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 11:53:26 ] struct base { virtual void hoge(){・・・}; }; struct sub : public base { virtual void hoge(){・・・}; }; int main(void) { sub s; s.hoge(); return 0; } ↑見たいな感じに書いても仮想関数の検索コストって掛かるもの? 静的に決定できるからコストかからないと思うんだけどどうなんでそか?
59 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 12:00:13 ] >>58 コンパイラによるとしか
60 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 13:49:23 ] >>58 VCで確認したら、sub::hogeを直接コールしてた。
61 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 15:38:50 ] >>58 BCC(ECC6.2.0)もsub::hogeを直接コールしてた 最適化が糞なコンパイラですらこれだから大抵のコンパイラは 出来るだけ静的に解決出来る所はするのではないか
62 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 15:45:10 ] 細かな部分で挙動がクソなだけでBCCの最適化は普通に良いよ
63 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 15:48:48 ] gccも直接sub::hogeしてた
64 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 17:07:54 ] みんなテストさんくすこ
65 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 17:26:08 ] というか直接呼ばないようにコンパイルする意味が分からないってレベルだしな まぁでも、確実な根拠があると一応ちょっと安心かな
66 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 17:35:53 ] >>58 VCでこうだと、テーブルジャンプになってた。 sub* s = new sub(); s->hoge();
67 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 17:38:31 ] そりゃそうだろw
68 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 17:41:20 ] >>67 これ、最適化したらまずいの?
69 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 17:58:52 ] それの場合、最適化するコンパイラは無さそうだけどなぁ sが実際に保持している型をコンパイルタイムで追尾しなきゃならないから、処理が 重くなる割には性能向上が全く期待できない(レアケースすぎるから) 規格上、確実にs->hoge()の時点でsのポイントするインスタンスがsub型と確定可能 かどうか、というのもちょっと確信は持てない(newの辺りが特に) まぁ実験するのは面白いかも
70 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 18:13:46 ] ちょっと見た目では、sub::hoge()以外が呼ばれる余地がないと思うけど、 なんか落とし穴でもあるのかね。 最適化されないってのは。
71 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 18:28:56 ] >>70 new が例外起こす場合を考慮すると、s == NULLもあるから sub::hoge()は呼べないのでは。 つーか new がオーバーライドされてたらもはや何でもあり。
72 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 18:29:17 ] ポインタが実際に指している型を静的に追尾するメリットは、>>66 のようなコードが ごく僅かに最適化されるくらいだと思う。 実用的にはメリット皆無に限りなく近い予感。コンパイルも遅くなるだろうし。
73 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 18:30:09 ] >>71 new で例外が発生すれば s への代入も、それに続く s->hoge() の呼び出しも行われない から、それは関係ない。
74 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 18:34:06 ] 需要が無いor真面目に書けば最適化不要、って場合は最適化を期待しない方がいい
75 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 19:29:57 ] s->hoge();の時点でアップキャストもダウンキャストもなく、 正しくsubのインスタンスを指してることをどうやって保障するかじゃない? 人間には簡単に分かる事もコンパイラだと100万行のコードでも同じ動作しなきゃならんと思うとかなり面倒な気がする
76 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 19:48:59 ] vc8だとs.hogeはインライン展開、s->hogeは仮想呼び出し intel c++だとs.hogeもs->hogeもインライン展開された。
77 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 20:19:27 ] 流れと無関係にsubという識別子が気になるPerl経験者であった
78 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 23:23:40 ] Intelコンパイラさんマジパネー
79 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 23:58:38 ] ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9957.txt ロープレのイベントなんかで、使う分だけ メモリを確保したいのですが、こんな感じでいいでしょうか。 メモリは正しく確保できているか、 通常の配列より容量を削減できているかあたりです。
80 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 00:14:25 ] >>79 これならほとんどの場合において配列だけの方がメモリ効率はいいよ 開発効率をあげたいなら STL を使うといいよ 目的が、作ることより勉強優先っていうなら苦しむといいよ
81 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 00:40:41 ] void hogehoge(double x0, double x1, double dx, const fugafuga& fuga) { for(double x = x0; x < x1; x += dx) fuga(x); } これを template <class Iterator> void hogehoge(Iterator begin, Iterator end, const fugafuga& fuga) { for( ; begin != end; ++begin) fuga(*begin); } という形にしたいんですけど新しいIterator作る以外になにか手はありますか?
82 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 01:09:43 ] >>80 ありがとうございます。 メモリは、3つのイベントを作るとすると、 配列だと作った数に関係なく 8 * 32 バイト、 ポインタだと 4 * 32 + 8 * 3 で少なくできると思ったのですが。 (4はポインタのサイズ、8は構造体のサイズ、 32はイベントを作れる最高の数) また、構造体のサイズは、実際のゲームではもう少し大きいです。 その効率の悪さについてググってみたのですが、 連続な領域でない事が関係しているんですかね。 stlはc++の機能みたいですね。 ヒントになる事もありそうなので勉強してみます。
83 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 02:42:11 ] >>81 配列や標準コンテナに入れて呼び出すとかでいいの?
84 名前:デフォルトの名無しさん [2009/09/25(金) 15:00:42 ] ttp://msdn.microsoft.com/ja-jp/library/cc411004.aspx にあるSendInput関数という関数を使いたい場合は、 SDKというものをインストールしないとダメなのでしょうか?
85 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:08:07 ] 環境による
86 名前:デフォルトの名無しさん [2009/09/25(金) 16:47:39 ] staticメンバ関数から 同じクラスの中にある他のメンバ変数(静的か非静的かは問わず)を 操作することはできないのですが どうしても操作したい場合には どういった方法をとることができるのでしょうか?
87 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:53:15 ] 引数で渡せばおk
88 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 17:17:10 ] staticメンバ関数じゃなくすればOK staticメンバ関数は特定のインスタンスに対する操作ではないので、 インスタンスごとに存在するメンバ変数にアクセスできないのは当然です。 どのインスタンスのメンバ変数にアクセスしたいのかを指定するには、 (1) 通常のメンバ関数にする → this で指定されるインスタンスにアクセスする (2) 引数でインスタンスを渡す → 引数で指定されたインスタンスにアクセスする (3) 別の変数(グローバル変数やstaticメンバ変数)でインスタンスを指定する のどれかの方法で行います。
89 名前:デフォルトの名無しさん [2009/09/25(金) 17:54:25 ] aaa型のabcという構造体を1.txtに書き出しました。 1.txtの内容をabcに代入するにはどうやればいいんでしょうか? #include <stdio.h> #include <stdlib.h> int main() { FILE *fp ; fp = fopen("1.txt", "w"); struct aaa{int a;int c;}; aaa abc; abc.a=500; abc.c=555555; fwrite( &abc, sizeof(aaa), 1, fp ) ; return 0; }
90 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 17:56:05 ] fread()
91 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 17:58:04 ] >>81 その例なら、イテレーターとしてint*が渡せるね
92 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:03:07 ] >>89 出来ればfwrite()、fread()を使う時は"wb"や"rb"で開いた方がいいよ ランダムアクセスする時にcooked modeだとズレが邪魔をするOSがある
93 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 19:37:49 ] >>90 >>92 ありがとうございました。がんばってみます
94 名前:79 mailto:sage [2009/09/25(金) 21:44:42 ] すいません、別スレで質問したいと思います。 ありがとうございました。
95 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:56:16 ] >>89 じゃないんだけどバイナリエディタで読むと 23 7A 08 00 で、 00 08 7A 23 の順で読み込めばいいんでしょうかー?
96 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:10:12 ] リトルエンディアンだとそう。 abc.cの部分についてだよね
97 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:11:14 ] 今のLvだとそこは深く考えなくていいと思うよ。 単純にfreadとfwrite使えばいい。
98 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:14:06 ] >>96 >>97 そうです、ありがd
99 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:55:41 ] fprintf(fp,"%lf %lf %lf %lf %lf %lf %lf %lf",a,b,c,d,e,f,g); や cout << a <<" "<< b << setw(1) << c <<" "<< d <<setw(1) << e <<" "<< f << " " g << endl; な感じのタイプ数が多いのを cout << a << b << c << d << e << f << g << endl; こんな具合に書きたいんですが、何かいい方法ありませんか。
100 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:58:31 ] >>99 オペレータをオーバーライド
101 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 23:00:49 ] ほとんどオブジェクト指向理解してないので、書いてくれるとうれしいでつ
102 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 23:01:45 ] >>100 それはオーバーロード。 >>101 オブジェクト指向とか関係ないから。
103 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 23:08:34 ] んじゃ、オーバーロード理解してないんで、書いてくれるとうれしいなぁ...
104 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 23:12:02 ] >>103 ググレカス
105 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 23:41:43 ] >>3 血をはいてるぷーさんにしか見えん
106 名前:デフォルトの名無しさん [2009/09/26(土) 00:33:22 ] >>92 どこかで聞いたような単語を、意味も知らずに偉そうに使って 恥ずかしくないですか?
107 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:54:51 ] Class* a; と Class *a; の違いがわかりません。 両者は使い分けないといけないものなのですか? それとも一方にそろえるべきものなのですか?
108 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 01:23:04 ] どこにホワイトスペースを挟もうと違いはない。
109 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:14:06 ] >>107 Class* a, b; と書いたら Class *a, *b; という意味にはならず Class *a, b; という意味になるので注意 それだけ気をつけていればどちらで書いてもOK
110 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:38:08 ] >>92 cooked modeという言葉を初めて知ることができてよかった。 けどバイナリに対する言葉はアスキーもしくはテキストと言ったりしない?
111 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:59:23 ] >>110 まあどっちでもいいんだけどな バイナリモードに対応するのはraw mode MS/DOS、Windowsのみに存在する区別らしい Linux、UNIXには区別は存在しない
112 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 03:07:29 ] fopen()のtとbは、raw とかcookedとか言わないだろ。
113 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 03:11:40 ] 頭の中でわかっていればいいんだよ 他人に伝える時はテキストとバイナリと言うべきだけどな
114 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 03:18:45 ] まぁMS-DOSが懐かしくはあった
115 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 03:22:25 ] 素人がインストロールとか言ってたら、ネタにして笑ってるくせに。
116 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 03:37:26 ] cooked mode という用語は、 一般的には端末入出力、特に入力時に 編集した結果を受け取るのではなく Enterやカーソルキーなどの、生の情報を受け取るために使う。 ファイルの\r\n変換に使うことなど、まず無い。 なぜならば、そもそもファイルのベタなデータを 「行」という単位で扱おうとしていること自体 「生のままで扱っていない」から。 \r\n変換のことを cooked mode なんて呼ぶと 陰で笑われるから、気をつけたほうが良いよ。
117 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 03:48:29 ] 望むところだ
118 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 03:53:36 ] >>115 その例が同質のものだと思ってるなら、お前の頭もネタにして笑われるレベルだな。
119 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 03:57:31 ] 知ったかして恥ずかしい用語の使い方してるってだけのくせして、なにとりつくろってんだ。
120 名前:デフォルトの名無しさん [2009/09/26(土) 11:00:53 ] Linux環境でP2Pボイスチャットを作りたいのですが、C++のオーディオに関する知識がまったくないので、 どのライブラリを使えばいいのかわかりません オーディオストリーミングに適したライブラリがあれば教えてください
121 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:55:57 ] >>120 背伸びするのはいいんだけど、背伸びしすぎじゃねーの オーディオだけじゃなくて、ストリーミングもP2Pの知識もないんだろ?
122 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 15:14:35 ] 関数についてですが、void aaa();と宣言したあと、 main関数の中でもう一度void aaa();sと書くのは、もう一度プロトタイプ宣言をしていると言うことでしょうか? またこのように、サイトなどからコピーする時に、よく型をつけたままコピーしてしまい不具合が起きてしまいます。 これを防ぐ方法はないでしょうか? void aaa(); int main() { void aaa();///←ココ return 0; } void aaa(){return;}
123 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 15:19:00 ] >>122 関数内の void aaa() は外にある宣言を繰り返していることになる。 ちなみに引数リストが空の宣言は「プロトタイプ宣言」とは言わない。 2つ目の質問は、「型をつけたままコピー」と「不具合」が何のことかわからん。
124 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 15:20:16 ] >>122 型の不一致が無ければ問題ないよ
125 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 15:49:31 ] >>123 >>124 ありがとうございましたす 後半はあんまりキニシナイでください
126 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 18:51:56 ] >>108 , 109 ありなとう ひところから急に Class* な表記が流行りだしたような気がしてたから ちょっと気になってたんですが、自分の好きなClass *表記で気にしない ようにします。
127 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 21:12:03 ] C/C++の形態論的にはClass *a;という書き方のほうが整合性が取れているように 思う。意味論的にはClass* a;のほうが相応しいと思う。文法的にはClass*a; でも構わないけどw まあ、好みで。自分はClass *a;。
128 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 21:29:02 ] template <class T> struct add_pointer{ typedef T* type; }; add_pointer<some_class>::type psc; これが正解だからこれからはこれを使うように
129 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 21:31:51 ] 俺はClass* a;だな 「Classのポインタ」という変数aって感じがいい >>109 みたいな問題があるけど、1行で複数の変数を宣言しなければいいんだし
130 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 21:38:42 ] Class *p;とClass* p;はどっちでもいいけど、 Class &r;はなんかいやだなあ。
131 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 21:40:06 ] >>129 どっちかっていうと、Classへのポインタ
132 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 21:41:51 ] Class * ptr;派が一人もいないことに絶望した
133 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 22:10:29 ] それってなんか掛け算っぽくね? 完全に独断と偏見だけどさ。
134 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 22:18:45 ] 依存名だと掛け算優先だね
135 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 22:56:30 ] >>123 > ちなみに引数リストが空の宣言は「プロトタイプ宣言」とは言わない。 そなの?
136 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 23:16:40 ] >>135 C の場合、引数リスト無しの関数宣言 f() は f(...) と同じで、呼び出し時に引数の型は チェックされない。一方プロトタイプ宣言といえば以下のもの。 ISO C 6.2.1 p2 > (A function prototype is a declaration of a function that declares the types of its parameters) (関数プロトタイプとは関数の宣言で、その引数の型を宣言するもの) C++ の場合、引数リスト無しの関数宣言 f() は f(void) と同じで引数を取らないことを 宣言するが、 C++ には引数の型を宣言しない関数宣言というものが無いので、そもそも 関数プロトタイプというように呼び分ける必要が無く、すべて単に関数の宣言と呼べばいい。
137 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 23:21:50 ] 34へぇ
138 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 23:23:51 ] 65へぇ
139 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 01:50:04 ] unicodeを扱おうとワイド文字列型(wchar_t)に入れようとしましたが、うまくいきません どこが間違っているのでしょうか・・? int main() { wchar_t aaa[]="テスト"; return 0; }
140 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 01:52:44 ] >>139 × "テスト" ○ L"テスト"
141 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 02:00:34 ] int main() { wchar_t aaa[] = L"テスト♥"; wcout << aaa << " : " << aaa << endl; return 0; }
142 名前:デフォルトの名無しさん [2009/09/27(日) 04:32:31 ] ありがとうございます
143 名前:デフォルトの名無しさん [2009/09/27(日) 08:26:21 ] >>121 ストリーミングもP2Pも理論的には解っていますが、作った事はありません P2Pボイスチャットを作るのは大変だとわかっていますが、大学の課題なので 何とか完成させたいのです よろしくおねがいします
144 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 10:26:25 ] よしくです int Row = 10; int Col = 20; std::vector<std::vector<int> > Array(Row, std::vector<int>(Col)); このように書くことで、2次元int 型のvector コンテナが定義できますが 他の型、(list やmap、独自クラス)でも2次元のコンテナを作りたいのですが templae を用いて、汎用的にしたいのですが、どのように書いたらいいでしょうか。 よろしくお願いします。
145 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 11:08:42 ] >>144 template template パラメータを使うことが考えられる。 現行の C++ では template template パラメータの引数の数を固定しないといけないから、 使う側で専用の template メタ関数を用意しないといけないかもしれない。
146 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 11:10:41 ] #include <vector> #include <list> template < template <class, class> class Cont, class T, template <class> class A = std::allocator > struct Table { typedef Cont<Cont<T, A<T> >, A<Cont<T, A<T> > > > Type; }; int main(void) { Table<std::vector, int>::Type vec2d; Table<std::list, int>::Type lst2d; /* ・・・ */ return 0; } templateはよくわからんがこんな感じ?
147 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 12:07:05 ] >>144 です >>146 Thxです 使い方としてはこんな感じでしょうか? vec2d[10][10]; vec2d[0][0] = 100; int i = vec2d[0][0]; std::cout << i << std::endl; でもこれだと、Out of range で落ちてしまいますが? セマンティクス的に間違ってるんだろうか?
148 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 12:09:05 ] >>147 デフォルトコンストラクタが走っただけじゃ空なんだから、当然だろ。
149 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 14:19:41 ] >>144 だが More Effective C++ に載ってたので終了。
150 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 16:23:47 ] kwsk
151 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 16:55:30 ] Proxy Classだろjk でもlistで二次元配列作ると疎行列以外の用途では やたらと速度が遅くなっていかんな
152 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 17:08:14 ] 二次元配列なんて配列かvectorぐらいでしか使わんような気がするんだが本当に凡化する必要はあるのか
153 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 17:34:46 ] 数値ならvalarray使ったほうがいいし キーとレコードならmap使ったほうがいいし 生の二次元配列を使うことは少ないな。
154 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:13:04 ] >>144 です 最近template 中毒に冒されいて、どうして汎用化できるだろうかと、気になってしょうがないw
155 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:16:23 ] MESTLにもコンテナの汎化は基本的に悪手と書いてあったな どうしてもやるならアダプタかませてインターフェースを調整しないといかん
156 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:22:54 ] VS2008C++使っています 別のアプリケーション(メモ帳)にsendkeyで入力したいのですが、どうすればいいでしょう? 何とか↓まで調べたのですがこの先が良く分かりません。知ってる方いましたらお願いします。 #include<iostream> #include <conio.h> #include <windows.h> using namespace std; int main() { wcout.imbue(std::locale("")); HWND qqq = FindWindow( L"[Edit]", // クラス名//1つ目不明点 L"1.txt - メモ帳" // ウィンドウ名 ); SendInput( 1, // 入力イベントの数 LPINPUT pInputs, // 挿入する入力イベントの配列//2つ目不明点 int cbSize // 構造体のサイズ//3つ目不明点 ); return 0; }
157 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:28:10 ] win環境で、exe側からdll側に関数インターフェースを提供する場合、 exe側で関数をexportして、dll側でGetModuleHandleするのが唯一の方法でしょうか?
158 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:32:31 ] >>156 VC++ なら普通SendMessageやPostMessage が無難だと思うぞ、ぐぐれば事例が沢山あるし
159 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:33:38 ] >>157 試してないけど Dll側にSetFunc()を作ってExe側から関数ポインタあげたら?
160 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:37:36 ] >>158 ありがとうございます。やってみます
161 名前:デフォルトの名無しさん [2009/09/28(月) 17:03:06 ] インクルードするとエラーが出ます。これはどういうことでしょうか・・? #include <iostream> #include <string> #include <fstream> #include <windef.h> #include <windows.h> using namespace std; int main(){return 0;} 1>------ ビルド開始: プロジェクト: no, 構成: Debug Win32 ------ 1>コンパイルしています... 1>a.cpp 1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(5545) : error C2146: 構文エラー : ';' が、識別子 'ContextRecord' の前に必要です。 1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(5545) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(5545)
162 名前:デフォルトの名無しさん [2009/09/28(月) 17:03:48 ] : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(11263) : error C2065: 'PCONTEXT' : 定義されていない識別子です。 1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(11264) : error C2146: 構文エラー : ')' が、識別子 'ContextRecord' の前に必要です。 1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(11264) : warning C4229: 旧形式が使用されています : データの修飾子は無視されます。 1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(11264) : error C2182: 'RtlCaptureContext' : 'void' 型が不適切に使用されています。 1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(11264) : error C2491: 'RtlCaptureContext' : dllimport データ の定義は許されません。 1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(11264) : error C2059: 構文エラー : ')' 1>c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(12935) : error C3861: '__readfsdword': 識別子が見つかりませんでした 1>c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(1020) : error C2146: 構文エラー : ';' が、識別子 'LPCONTEXT' の前に必要です。
163 名前:デフォルトの名無しさん [2009/09/28(月) 17:06:20 ] 1>c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(1020) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(1020) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(4015) : error C2061: 構文エラー : 識別子 'LPCONTEXT' 1>c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(4023) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(4023) : error C2143: 構文エラー : ',' が '*' の前にありません。 1>ビルドログは "file://c:\Documents and Settings\user1\デスクトップ\sdk\Debug\BuildLog.htm" に保存されました。 1>no - エラー 15、警告 1 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== 以上です。分かる方、お願いします。
164 名前:デフォルトの名無しさん [2009/09/28(月) 17:15:02 ] 環境を書き忘れました VS2008 C++です。よろしくおねがいします
165 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 17:41:37 ] ふと思ったのですが *++p = 'a'; *++p = 'a'; *++p = 'a'; ... と *p++ = 'a'; *p++ = 'a'; *p++ = 'a'; ... はスピードに違いがありますか。 つまりインクリメントとデクリメントで速度が変わったりしますか。 どちらも1を足すというのはかわりませんが、こっちのほうが効率のよいバイナリが生成されるとか そういうのがあれば教えてください。
166 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 17:48:52 ] >>165 環境の提示がないので一般論として考えると、2行目と4行目はインクリメントするタイミングが違うだけ。 6行目はインクリメントとデクリメントの違いだけ。 いずれにしても、有意差が出るほど阿呆なコンパイラも環境もないと思うがね。
167 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 17:50:22 ] >>165 その例では機能が同等では無くね?
168 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 19:26:44 ] まあ、一般的な(前置|後置)(インクリメント|デクリメント)の速度の違いだけに 着目してるんじゃないかな。 どうも、前置|後置とインクリメント|デクリメントを混同している節が 見受けられるが……。
169 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 19:48:00 ] >>161 #include "stdafx.h" あと氏ね
170 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:57:31 ] まるちスレッドの割り込みって最短でどこまで割り込まれるんですかね? void func() { line1; line2; line3; } int main(void) { line4; func(); line5; return 0; } 上の例で言ったらline4とfunc()の間、func()とline5の間まで割り込まれる? それともline1、line2、line3の間でも割り込まれる? 1行が終わる間に割り込まれることはある? a = b = c = d;としたらどこかで割り込まれる可能性はある?
171 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:58:35 ] >>170 いつでもありえます
172 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 21:09:18 ] > a = b = c = d;としたらどこかで割り込まれる可能性はある? a = 100; みたいに代入一個でも、アセンブラだと2命令以上になることがあるんで、代入中に割り込まれることもある。
173 名前:spirit mailto:sage [2009/09/28(月) 21:18:32 ] >>170 行とか演算子とか無関係に割り込まれる。 すなわちb=a+3;の実行中にaを読んでbに書き込む間でも割り込まれる。 さらにa++;の実行中にも割り込まれる。
174 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 21:20:43 ] さらにマルチプロセッサだと1命令の実行中でも割り込まれる。
175 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 21:29:10 ] >>169 ありがとうございました。すいませんでした。
176 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 21:31:02 ] 割り込まれまくりなんですね・・・ そうなるとmutexを取得する関数の途中で割り込まれると バグの元になりそうな気がするんですけど大丈夫なんでしょうかね?
177 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 21:33:11 ] >mutexを取得する関数 システムコールなので不具合は起きない
178 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 22:16:05 ] mutexを含むマルチスレッド同期ライブラリは、「このように呼び出すとここから ここまでは割り込まれないよ」とかそういう細かい仕様がいちいち決まってるので、 それを調べて使うもの。
179 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 22:56:13 ] 画像の任意回転、画像を表示したあとその上に場所指定して画像を合成etc・・・ をCで作る課題が出てるのですが、助けになるような参考書・サイト等ありませんでしょうか お願いします
180 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 22:59:41 ] ググレカス^^
181 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 23:47:07 ] >>180 このスレの意味がなくなる
182 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 00:33:11 ] DXライブラリでおk
183 名前:デフォルトの名無しさん [2009/09/29(火) 01:49:49 ] DXライブラリが手っ取り早いな
184 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 01:56:22 ] DXライブラリ使えばいいと思う
185 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 02:01:26 ] DXライブラリがいいね
186 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 05:44:20 ] >>166 ありがとうございます。違いはないとのことで安心しました。 >>168 >どうも、前置|後置とインクリメント|デクリメントを混同している節が >見受けられるが……。 その通りでしたorz 無知をさらして申し訳ない
187 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 10:25:22 ] >>186 プリミティブ型ならいいけど、クラスに対する前置後置はだいぶ効率に差ができるから注意しよう
188 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 10:54:27 ] ×だいぶ効率に差ができるから ○効率に差ができる場合もあるから
189 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 11:59:47 ] 別人だがkwsk
190 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 12:18:04 ] 詳しくも何も、後置は原理的に重くなりやすいのが一目瞭然じゃないか? クラスじゃないなら、見た目の好みとかで後置にしても最適化で前置に置換されることが 期待できるけど、統一感を求めるなら、必要が無い限りは前置で統一した方がいいだろうね。 クラスの時は勝手に最適化で前置に変えたりできないから。
191 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 12:19:41 ] 別にクラスじゃなくて構造体でも演算子オーバーロードしていれば同じことだけどね。
192 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 12:28:00 ] クラスと構造体は本質的には同じものだよ
193 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 12:29:03 ] クラスと構造体はほぼ同じだからいちいち説明する必要も無いと思うが
194 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 12:29:48 ] かぶったし
195 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 12:31:03 ] 共用体とか持ち出してくればまだ芸があったかも。 でも余計うざいだけか。
196 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 12:36:34 ] >>189 むかしむかし、後置だとインクリメントする前の状態をどこかに保存しておかないといけないのであったとさ
197 名前:デフォルトの名無しさん [2009/09/29(火) 15:34:40 ] で?
198 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 16:41:01 ] >>196 えっ? 今は違うの?
199 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 17:34:08 ] 今は技術が発展しているのでそんな事はありません 科学万能の時代が到来したのです
200 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 17:46:33 ] >>198 可哀想な人…
201 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 18:11:48 ] it_a = it_b++ とかやったらちょっと面倒なことになる。
202 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 18:50:59 ] >>199 今はどうなってんのさ。 >>201 どう面倒なことになるのさ。
203 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 19:27:56 ] 自分で調べろw
204 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 19:34:50 ] ググったけど、出てこない。
205 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:44:44 ] ググレカス。 ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88
206 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 21:29:15 ] >>196 の言いたいことが分かったかも。 後置演算子のオーバーロード方法が無いとcallerが保存しなきゃならなかった、ってことが 言いたいんじゃないのかな。 ところが、普通に考えたらcallerが保存しなくてもcalleeでは保存するコードを書くことに なるから、端から見ると>>196 が何言ってんだか分からない人状態に。 一方>>196 は、intを引数にすれば後置になるの知ってるの俺だけかよプゲラッチョ、とか 一人でいい気分になっていた、とか。
207 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 21:32:38 ] 単にreturnの後に処理を入れられないという 言語制約上の問題でしかないね
208 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 23:03:02 ] >>206 何が言いたいのか分からん。 最適化されない限り、前置の方がコストかかるのは当然で。 >>196 のだめなところはツッコミがあるように、むかしむかし、というのを付けてしまったとこ
209 名前:208 mailto:sage [2009/09/29(火) 23:03:59 ] あああ。前置じゃなくて後置ね。
210 名前:198 202 mailto:sage [2009/09/30(水) 00:31:56 ] なんだ、やはり、「むかしむかし」が余計か。豪快に釣られたぜw 前置/後置のオーバーロード時の注意点は知っていたが、規格が変わったのかと焦ったぜ。
211 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 02:13:24 ] 誰か円形のHPゲージの描画の方法を教えてくれないか・・・? 細い棒の画像を何回かループさせて徐々に角度をつけて 描画しようと思ってるんだがいまいちうまくいかん。
212 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 02:33:40 ] pie関数でいけるんでないの。
213 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 02:40:12 ] pie関数って何ですか?
214 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 03:47:24 ] 塗りつぶし円弧を描画する関数
215 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 03:59:02 ] それがわからないから聞いているのですが
216 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 04:06:59 ] え?塗りつぶし円弧が分からないのか?おうぎ形のことだよ。 それで円形のHPゲージの描画ができるとは思えないといってる? もうちょっと具体的に書いてくれないか
217 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 04:08:44 ] いまいちうまくいかん程度ならもうちょっとがんばればできるよ その方向でがんばれ
218 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 04:28:25 ] その塗りつぶしの円弧の描画のソースを C++暦半年の俺がわかるように教えるんだ!
219 名前:デフォルトの名無しさん [2009/09/30(水) 04:46:25 ] Intelコンパイラでコンパイルする際に、#pragma ivdepを使っているのですが、 他のコンパイラでコンパイルした際に、不明なプラグマと警告が出てしまいます。 OpenMPだと、 #ifdef _OPENMP #pragma omp parallel for #endif の様に書いてやれば、対応していないコンパイラで警告を出さないようにできますが、 上記のような場合どのようにしたらよいのでしょうか?
220 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 04:56:52 ] 警告抑制
221 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 05:42:50 ] www.google.co.jp/search?q=intel+%83R%83%93%83p%83C%83%89+%92%E8%8B%60%8D%CF%82%DD+define
222 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 05:44:14 ] ?
223 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 06:11:21 ] >>218 環境 >>219 intelコンパイラであるかどうかをifdefで判断すればよいということ。
224 名前:(マルチポスト) [2009/09/30(水) 06:15:36 ] 的外れは質問かもしれませんが C++で作られたローカルのプログラムのWinsockからPHPのサーバのプログラムと通信することはできますか?
225 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 06:43:29 ] >>224 PHPのサーバと言うのは何のこと?
226 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 06:45:40 ] PHPで書こうと思ってるサーバープログラムです
227 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 07:17:46 ] なんで出来ないと思ったん?
228 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 08:05:52 ] >>215 WindowsAPIとかGDIとかでググレ
229 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 08:31:26 ] >>215 ぶっちゃけるとアニメーションモデル読み込んで再生して終り 中身はHP0〜100%(t=0〜1)までのアニメーションでデザイナに作っておいてもらって プログラマはHPに応じてアニメーションを進めるだけ
230 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 08:37:55 ] >>226 PHPでサーバープログラム? Webサーバに置くスクリプトじゃなくて?
231 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 10:07:18 ] ここでいいか分からないんですが質問させてください ちょっと特殊なWindowsプログラミングについてです いわゆるKERNEL32→LERNEL32の方法で msvcrt.dllの関数をフックしたいのですが 作成したDLL(仮にXXVCRT.DLLとします)を対象のアプリケーションで 使用するとクラッシュしてしまいます 簡易なテストアプリを作成してXXVCRT.DLLをLoadLibraryして GetProcAddressでsprintfやmalloc/freeを使う限りは問題ありません 落ちている場所はおそらくRtlEnterCriticalSectionの内部のようで 対象のアプリはマルチスレッド使用なのでそのあたりかとは思うのですが… XXVCRT.DLLは基本的に ruffnex.oc.to/kenji/text/listexport/ の方法で作成しています 開発環境はもちろんVC++6.0で標準ライブラリは無視にしてます なお、対象のアプリはおそらくMinGWでビルドされています www.codeproject.com/KB/system/api_spying_hack.aspx ではmsvcrtは特殊であるようなことが書いてありますが msvcrtのフックはできないものでしょうか? ヒントやURLを提示していただけるだけでも構いません より適切なスレがあれば誘導して頂けるのもありがたいです なにか情報をお持ちの方、お教え願えないでしょうか
232 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 14:25:41 ] 質問です。 boost::spirit です。 rule<> expr = uint_p | real_p; parse_info<> pi = parse("10.0", expr); これで、pi.full == true とならないのですが、どうしてでしょうか。 Win7x64 VC++9 boost1.40.0
233 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 15:10:18 ] >>231 改造とかクラックとかそういうスレないの?
234 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 18:09:05 ] >>232 real_pとint_pを入れ換えて味噌
235 名前:232 mailto:sage [2009/09/30(水) 18:42:37 ] >>234 ありがとうございます。 もともと uint を先に持ってきたのは、大きな整数を入力すると、double の精度を 超えた値が丸められてしまうのを防ぎたかったんです。 コードを書き直しました。 bool is_real_value; double real_value; unsigned __int64 uint_value; void IntAction(unsigned __int64 v) { is_real_value = false; uint_value = v; } void RealAction(double v) { is_real_value = true; real_value = v; } int main() { rule<> expr = (uint_parser<unsigned __int64>()[&IntAction] | real_p[&RealAction]); parse_info<> pi; pi = parse("1.0", expr); ASSERT(pi.full); ASSERT(is_real_value); ASSERT(real_value == 1.0); pi = parse("12345678901234567890", expr); ASSERT(pi.full); ASSERT(!is_real_value); ASSERT(uint_value == 12345678901234567890); pi = parse("123", expr); ASSERT(pi.full); ASSERT(!is_real_value); ASSERT(uint_value == 123); } このコードのままだと、"1.0" の解釈で失敗し、uint_p と real_p を逆にすると、すべて real として処理されてしまい、ASSERTで止まりまくります。何がおかしいんでしょうか。
236 名前:デフォルトの名無しさん [2009/09/30(水) 19:29:42 ] draconux.free.fr/download/os-dev/linux0.01/linux-0.01-rm-3.x/linux-0.01-rm-3.3.tgz このソースコードをmakeしたのですが、 ld -s -x -M -Ttext 0 -e startup_32 boot/head.o init/main.o \ kernel/kernel.o mm/mm.o fs/fs.o \ lib/lib.a \ -o tools/system > System.map kernel/kernel.o: In function `scrup': console.c:(.text+0x1ed6): undefined reference to `columns' console.c:(.text+0x1fad): undefined reference to `columns' kernel/kernel.o: In function `scrdown': console.c:(.text+0x2023): undefined reference to `columns' make: *** [tools/system] Error 1 というエラーが出てコンパイル出来ません。 このエラーを解決したいのですが、どのようにすればいいでしょうか?
237 名前:234 mailto:sage [2009/09/30(水) 19:39:19 ] >>235 最後まで到達できないのは、rule<> exper=uint_p|real_p;のuint_pでパースが10で成功し、exprが成立するため。そこでパースが終わってしまう。 防ぐには以下の方法がある。 strict_real_pを使うと小数点が無い実数にはマッチしなくなる。 longset_d[P]...を使うと最大長マッチが採用される。 eps_p(P)を使って区切りまでパースしたかを確認できる。
238 名前:232 mailto:sage [2009/09/30(水) 19:51:54 ] >>237 strict_real_p | uint_p で出来ました。 大変助かりました。
239 名前:デフォルトの名無しさん [2009/09/30(水) 20:00:38 ] >>236 ですが、 開発環境は、Ubuntu,gcc4.1です。
240 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:19:42 ] >>239 いや、だから columns について調べるべきでしょう。
241 名前:デフォルトの名無しさん [2009/09/30(水) 20:26:26 ] >>240 調べたのですが、解らなかったのでこちらに来ました。前のスレのほうで環境依存スレに行ったほうがいいと言われたというのも一つです。 console.c内にて #define COLUMNS 80 static unsigned long lines=LINES,columns=COLUMNS; として定義及び宣言があり、どうしてcolumns変数が出てくるのかが全くわからないのです。
242 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:17:02 ] TCHARからwchar_t *に変換(キャスト)するにはどうしたらよいですか?
243 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:25:31 ] なぜそういうことする必要があるか知らんが… TCHAR ch; // ... wchar_t *p = (wchar_t *)ch;
244 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:28:31 ] >>243 あ、そのままでよかったんですね^^; センキュー
245 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:36:05 ] >>244 だめだよ。 TCHAR* ch; // ... wchar_t *p = (wchar_t *)ch; なら、いい。 あと、最近のVCは_UNICODEがデフォになってるけど、 古いやつだったら、_MBCSがデフォだから、もしそうだったら、 単純にはキャストできない。
246 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:31:17 ] static unsigned long lines=LINES; static unsigned long columns=COLUMNS;
247 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 23:37:31 ] デスクトップの画像はどういう風に取得すればいいんでしょうか? 事務仕事をほぼ全自動でできるようなソフトを作ってみたいと思っているのですが、 とっかかりがつかめません bitmap形式などは何となくわかったのですが、肝心の画像自体の取得方法が分かりません APIを使うような感じはするのですが、見つかりませんでした 分かる方、教えてください。お願いします
248 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 23:40:13 ] >>247 uwsc ってソフトがあるよ
249 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 23:41:52 ] >>247 GetDC(HWND hWnd); で、0を渡せば、画面のデバイスコンテキストが取れたような記憶が。
250 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 23:45:09 ] >>248 >>249 ありがとうございます 既にあったのですね、トホホ なんだか悔しいので、とりあえず作るだけ作ってみることにします
251 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:37:37 ] 別に止めはしないが、とても「事務仕事をほぼ全自動でできるようなソフト」を作ろうとする人間の台詞じゃないな。
252 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:41:07 ] そもそも、「デスクトップの画像」と言う当初の質問が自動化とどう関係しているのだろうか
253 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 10:05:49 ] スクリーンショットを使う事務作業なんていくらでもあると思うけど
254 名前:232 mailto:sage [2009/10/01(木) 12:57:19 ] boost::spirit でまた躓いてしまいました。 parse_info<> pi; pi = parse("12.", real_p); // 12. ドットに注意 ASSERT(pi.full); ASSERT(pi.length == 3); // 止まる。実際は 2 が入っている。 pi = parse("12.", longest_d[real_p | int_p]); ASSERT(pi.full); // 止まる デバッガで追うと、確かにドットの後に数値が無ければ、length はインクリメントされてないんですが、 scanner の first (scan.first) はドット文字の次を指したまま return しています。 length と 実際に進めた幅とが一致しない状態というのは許されるんでしょうか?また、上の二つの parse で、下は失敗するのはおかしいと思うのですが、勘違いでしょうか? Win7x64 VC++9 boost1.40.0
255 名前:デフォルトの名無しさん [2009/10/01(木) 14:53:49 ] >>246 申訳ないですが、その書き方ではエラーを解決出来なかったので グローバル変数として宣言しましたところ、一応はコンパイルが出来ました。
256 名前:デフォルトの名無しさん [2009/10/01(木) 19:44:19 ] 環境はMac OS X 10.5 & Xcode 3.1 (gcc 4.0)です PreProcessor Macros でマクロを設定してコンパイルはできたのですが 実行すると#ifdef〜#endifでかこった部分が実行されていません どうすればよいのでしょうか?
257 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 19:51:09 ] >>256 #ifdefの行をくわしく
258 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:39:04 ] >>256 ifdefで指定してるものがdefされていなかったんでしょう
259 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 00:21:58 ] unary_functionやbinary_functionってなんのためにどうやって使うんでしょうか?
260 名前:デフォルトの名無しさん [2009/10/02(金) 00:36:59 ] VS2008SP1なのですが、取りあえずboostを試してみようと思い、 #include <boost/asio.hpp> をソースに書いてみただけでコンパイル時間が1秒→15秒になってしまったのですが、 こういうものなのでしょうか?
261 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 02:23:05 ] >>260 ありえん話ではないです。 というかメモリ少ないとかじゃないの?
262 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 02:26:31 ] または、ソースごとに毎回includeされててpchも使ってないとか。 もちろん、メモリ不足がまず疑われるが。 VS使うならpchは覚えた方がいいな。使ってないなら、だけど。 でかいプロジェクトでBoostバリバリ使ってたりすると、コンパイル時間が普通に 1/20以下くらいになっても不思議は無い。
263 名前:スレ違い、でしょうか…… mailto:sage [2009/10/02(金) 03:53:56 ] 巧く言えないんですが、昔、VC6.0とDirectX7を齧って終わっただけのプログラミングを、今更始めようと思いました。 今の状況は ・持ってるのは、Visual Studio 2005 Standard Edition ・作りたいのは、Windowsのゲーム ・使いたい言語は、C/C++ ・使いたいライブラリは、DirectX 8.x、もしくは、DirectX 9.x こんな具合で ・Visual Studio 2005 に関する初心者向けの情報 ・DirectX 8.x or 9.x に関する初心者向けの情報 この二つに関する情報が欲しいと考えています。 本であれば本で、webであればwebで、どんなものがいいのか、教えて頂ければ幸いです。 どうか、よろしくお願いします。
264 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 04:35:08 ] >>259 ググレカス
265 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 04:41:20 ] >>263 MSDN
266 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 07:05:42 ] >>263 VS2008ExpressEditionに移行しちゃってもいいんじゃね、タダだし
267 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 08:53:42 ] >>254 .で終わると確かにパースの終了位置が変になるね。 是非boostスレを賑わしに来てください。 pc12.2ch.net/test/read.cgi/tech/1251446016
268 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 16:37:32 ] >>261-262 メモリの空きはまだまだあるのですが、 includeしてるソースを少し弄ってコンパイルすると、また10秒とかマタされます。 pchを使うと確かに早くなりますが、pchを使えない環境だと毎回こんなに待たされているんですかね? これはヘッダーへ実装も書いてしまうことの、弊害?と考えても間違いないでしょうか?
269 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:01:42 ] そのままではコンパイルが遅いからpchが発明されたとは考えられないかね?
270 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:28:59 ] メタプログラムのライブラリだからそうなるのは仕方ないな
271 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:08:17 ] VC++で簡単なwebクライアントを書いたんだけど、うまく動かない。 誰か教えて kissho.xii.jp/1/src/1jyou92844.cpp これを MyUtil->GetHttpContent( &content_data, &content_size, "yutori7.2ch.net", "/news4vip/dat/1254469638.dat", 1024, 5 ); で呼ぶと、116行目の select_result = select( 0, &tmp_fd_set, NULL, NULL, &timeout_tv ); // タイムアウト付き待機 でタイムアウトする。 試しに MyUtil->GetHttpContent( &content_data, &content_size, "jane.s28.xrea.com", "/bbs/dat/1249509078.dat", 1024, 5 ); で呼ぶと、即座にコンテントが返る。
272 名前:271 mailto:sage [2009/10/02(金) 19:09:08 ] vipのスレをリクエストした時の送出ヘッダをtelnetで # telnet yutori7.2ch.net 80 GET /news4vip/dat/1254469638.dat HTTP/1.0 Host: yutori7.2ch.net User-Agent: Monazilla/1.00 Connection: close として送出しても、当然即座にコンテントが返る。 なんとなくvipのケースではリクエストが完了してない気がするけど、どこがまずいのかよく分からない・・・('A`)
273 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:10:13 ] 普通にコンパイルに1時間以上かかる状況では何秒増減しようと大して変わらん
274 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:25:09 ] >>268 boostのヘッダーをインクルードしただけではそんなにまたされない。 ヘッダーに実装を書くとテンプレートのインスタンス化がされる場合がある、そのヘッダーをインクルード しただけでコンパイル時間がのびる。無用なインスタンス化がされないようにヘッダーに実装は書かないほうが良いよ。 テンプレートをtypedefしただけでもコンパイル時間は延びる。
275 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:42:30 ] 自分でWeb鯖たてて実験するのが楽なんでない?
276 名前:232 mailto:sage [2009/10/02(金) 20:14:08 ] >>267 やっぱ変ですよね? ありがとうございました。
277 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:53:23 ] >254のは初出だと思うけど、これ以外にもSpiritは結構バグあるみたいよ。Treeとか。 V2に期待ってことかね。
278 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 21:03:28 ] >>269-270 やはりこういうものなのですね >>274 asioの場合は空のcppへinclude書いただけで10秒近くになってしまいました。 っと今また計ってみたら8秒だた・・・ それでも私のような、書き直してはビルドの初心者にはきついですね。 大人しくpchを使っていこうと思います。 ありがとうございました。
279 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:20:55 ] うわ、asio重たいな。こんなのもあるんだな。 boostは無条件にpchに放り込んでたから気づかなかった。
280 名前:デフォルトの名無しさん [2009/10/03(土) 00:09:21 ] C/C++に直接は関係ないですが質問させてください。 1の補数、2の補数という言葉がありますが、 なぜこのような名前になっているのか教えてください。 (意味は知っています) 1、2 という数字に意味があるのでしょうか?
281 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 00:34:29 ] >>280 補数の意味が分かってないじゃん
282 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 03:12:32 ] まったくだ。 2の補数と単に言った場合、それが2種類あることも分かっていないんだろう
283 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 08:17:37 ] 3進数における2の補数のことは考えなくてもいいと思うけどな。
284 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 09:46:35 ] >>280 自己解決しました。 1の補数 各桁ごとに1の補数をとる 2の補数 2^nの補数をとる 1と2の意味が全く異なる上、 2じゃなくて2^nのことだし。 酷い用語が万延したものだ。
285 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 09:51:39 ] 文字列についてなんですが 文字列の最後の文字を削除する場合ってどうすればいいんですか? それっぽい関数が見当たらなかったんですが、皆さんどうやって処理するんでしょうか
286 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 09:56:04 ] void cut(char *str){ str[strlen(str)-1] = '\0'; }
287 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 09:56:48 ] あら、縮まってなかった。
288 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 09:58:49 ] >>286 ありがとうございます。 文字列の方は、最初から[10]と決めているんですが、この場合動的に管理しないと無理ですか?
289 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 11:50:42 ] >>288 ポインタそのものは変化しないので静的配列でもOK
290 名前:271 mailto:sage [2009/10/03(土) 12:18:05 ] 自己解決しました・・・(´・ω・`)
291 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 12:52:09 ] 自家発電しました(´・ω・`)
292 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 13:11:49 ] 自殺しました(´・ω・`)
293 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:29:41 ] 自乗しました
294 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 15:10:29 ] 自損しました(´・ω・`)
295 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 16:31:37 ] struct hoge { inline int operator [] (int i) { return a[i]; } int a[10]; } ↑のinlineって生の配列アクセスまで最適化されますか?
296 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 17:02:32 ] コンパイラ次第だが期待していい。
297 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 17:28:55 ] 環境VC++ 2008 Expressです。 配列 *points1 = メモリ確保した。 *points2 = メモリ確保した。 for ( i = 0; i < numPairPoints ; i ++) { points1 から始まる配列にxとyを代入する。 points2 から始まる配列にxとyを代入する。 } コード自体はとても簡単な処理なのですが、 デバッグしていると、i がある程度(デバック実行の度常に同じiの値)増えた後に、 何故かpoints2(のみ)の内容が書き換えられ、メモリアクセスエラーが起こしています。 こういうことが起こる場合にはどこでなんとかすべきなんでしょう? points1の処理は通ってpoints2が途中でだめなのでコード外の要因だと思うのですが・・・ よろしくお願いします。
298 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 17:34:10 ] >>297 points1 の型は何?
299 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 17:37:46 ] opencvなので簡略化しました。 書いてるコードはこんなんです。 CvMat* points1; CvMat* points2; points1 = cvCreateMat(1, numPairPoints, CV_32FC2); points2 = cvCreateMat(1, numPairPoints, CV_32FC2); for ( i = 0; i < numPairPoints ; i ++) { CvSURFPoint* r1 = (CvSURFPoint*)cvGetSeqElem( objectKeypoints, ptpairs[i*2] ); CvSURFPoint* r2 = (CvSURFPoint*)cvGetSeqElem( imageKeypoints, ptpairs[i*2+1] ); //略 points1->data.db[i*2] = r1x; points1->data.db[i*2+1] = r1y; points2->data.db[i*2+1] = r2y; points2->data.db[i*2] = r2x; }
300 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 18:03:49 ] >>284 おー昔のコンピュータの数値は整数ではなく [0..1) の固定小数点数を表していた と言えば後は分かるだろ
301 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:26:00 ] >>300 [0, 1) のことだったら 2の補数は1の補数と呼ばれなくてはおかしい。 [0, 2) の固定小数点数だとしても、 1の補数の方は各桁の1の補数であることは変わらない。 いずれにしろおかしい。
302 名前:デフォルトの名無しさん [2009/10/03(土) 20:15:38 ] C言語勉強し始めたド素人ですが質問です エディタにVisual c++2008使ってるんですが ファイルを作成する場合、まずはプロジェクトの作成→ソースファイルの作成らしいですが 1つのプロジェクトフォルダに別々のソースファイルを保存することはできないんですか?
303 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:21:36 ] >>299 opencvと言うのは知らんが、 単純に確保している領域をオーバーしてるんじゃないの?
304 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:30:35 ] >>302 メニューのプロジェクトから、新規項目の追加とか既存項目の追加とか。
305 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:37:47 ] >>304 新規項目で別のソースファイルを作れるんですが ただ、コンパイルするときビルドエラーとかになるんですよね
306 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:43:21 ] >>302 >別々のソースファイルを main()を2つ書いてるとか? もしそうだったら、プロジェクトの追加をするんだ。
307 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:44:49 ] >>305 エラーを貼ってみて。
308 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:55:40 ] プロジェクト上から見えてるmain文が一つだったらいくつソースファイルがあってもおk
309 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 21:35:36 ] >>299 何の関数か知らんけど、cvCreateMatの第1引数と第2引数を入れ替えてみそ
310 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:17:49 ] >>299 OpenCV の使い方に関する話になりそうなんで 【Intel】OpenCV総合スレ【画像処理】2 pc12.2ch.net/test/read.cgi/tech/1230511656/ こっちで聞いてみたら? ぱっとみ cvCreateMat の 第3引数はそれでよいっぽい 第1引数 第2引数 の関係と その後の操作の次元があっているのかわからん (NxM なのか MxN なのか
311 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:42:45 ] 構造体というものは、配列の範疇に入るんでしょうか? メモリだけ見れば似たような感じなのですが
312 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:45:10 ] "構造体"の"配列"もあるからどうかな...
313 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:48:54 ] 普通は範疇には入れないよな。 文脈によるけど。
314 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:50:42 ] どうせ全部ビット列だと割り切れば同じ扱いをしても違和感ないか。 面白い視点だな。
315 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:50:53 ] 構造体はメンバ間でパディングかかるけど 配列は隙間無で詰めないか?
316 名前:311 mailto:sage [2009/10/03(土) 22:55:02 ] どこで見たのかは忘れたのですが、構造体を配列と書いてるところがあったので気になって質問させていただきました もしかしたらサイト管理者の間違いかもしれないので、あまり気にしない様にします。ありがとうございました。
317 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:57:44 ] パディングパディング言うけどさ その空いた領域にほかのデータが書き込まれる可能性ってあるの?
318 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 23:00:33 ] ない
319 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 23:23:04 ] ないあるよ
320 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 23:44:19 ] パディングって何だと思ってるの? >317 気にしなければならないのは1構造体のサイズ=メンバの合計のサイズにしたければパディング無しにしなければならないって話なんだよ
321 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 23:44:37 ] 「ほかのデータ」の意味がわからんない
322 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:05:02 ] うろ覚えだけど構造体は4byteの倍数に合わせるようにうめてるとか聞いたような聞いてないような
323 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:15:43 ] アラインメントね あと4バイトとは限らない
324 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:21:25 ] 別のスレで質問したんですが人いなさそうなのでこっちで質問させてください。 visual studio 2008で それぞれ別のディレクトリに保存した同一ファイル名のファイルを プロジェクトに追加してビルドすると 未解決の外部シンボルというエラーがでます。 どうしたら同一ファイル名のファイルをビルドできますか?
325 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:24:18 ] ファイル名を変える
326 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:26:08 ] >>325 買った参考書に入っていたプロジェクトでは 同じファイル名でビルドできたので 出来ればその設定方法を知りたいんですが
327 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:28:53 ] プロジェクトをわけ、1ソリューションにまとめてみては?
328 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:29:16 ] >>326 こっちいくといいよ Visual Studio 2008 Part 18 pc12.2ch.net/test/read.cgi/tech/1251622158/
329 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:32:49 ] 他の原因でもそのエラーは出るからよくわからんけど ファイル名が同じだからコンパイル後の出力ファイルが上書きされたって事? だったらファイルのプロパティで->出力ファイル->オブジェクトファイル名を設定すればどうにかなりそうだけど
330 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:33:53 ] そもそもクラス名がかぶってるんじゃねの?
331 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:36:45 ] >>324 そのファイルへのパスちゃんと通ってるかィ?
332 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:38:33 ] >>329 ファイル名を指定したら出来ましたありがとうございます。 >>330 クラス名は被ってますがnamespaceで区別してます >>331 通ってます
333 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 06:25:57 ] VC2008でoggライブラリ使ってて遭遇したんですが、 CのライブラリをC++で使ってるときに if(true返す処理) { throw } Cライブラリの関数呼び出し というような状態で、例外が投げられませんでした。 C関数とthrowをそれぞれ別な関数に分割したら 思ったとおりに動いたのですが、もしかしてC関数と 例外って一緒に使っちゃダメなんでしょうか?
334 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 09:57:20 ] 例外が投げられないってどういう状態? C言語部分を通過するthrowは駄目だった気がする。 例えばC言語の関数に渡したコールバックで例外投げた場合とか。 void c_func(void (*callback)()) { callback(); } void cpp_callback() { throw ○; } void cpp_func() { c_func(cpp_callback); }
335 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 10:15:01 ] >>333 ライブラリ呼び出しで、そのような制限は聴いたこと無いな。sinとか普通に使ってるし。 その問題が起きる最小のコードを提示したほうが回答が得られやすいよ
336 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 10:26:21 ] >>334 もうちょっと具体的に書くと、 if(!dir.CheckPath(fileName_)) { //ファイルパスが有効ならtrueを返す関数 throw "無効なパス"; } //oggライブライリのファイル開く関数 if( ov_fopen(const_cast<char*>(fileName_), Dst_) ) return false; return true; ファルパスが無効なら例外投げるはずですが、投げられずに ov_fopenに行ってしまい、関数内でアクセス違反起こしてエラーになります。 パスチェックとov_fopenを別々な関数に分けて書くと、思ったとおりの動作をする ので、処理自体には問題は無いと思います。
337 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 10:37:35 ] >>336 ov_fopenをelse側に書くとどうなるの?
338 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 10:59:02 ] 例外仕様を避けるほうがいいのは何で? ・例外仕様を使わないとクライアントがメソッドの投げうる例外を調べるときにドキュメントを読むかソースを追跡するぐらいしかできない ・例外仕様で縛らないと実装の変更の際に投げる例外が増減する可能性もあるのでクライアントが実装まで気にしなければならない と考えると例外使用を使わないのはよくないような気がするんですが・・・ templateと相性が悪いのは分かりますが、非テンプレート限定なら問題ないはずです
339 名前:336 mailto:sage [2009/10/04(日) 11:18:50 ] >>337 試す前にリコンパイルしてたら症状が出なくなりました。 すっきりしないですが・・・
340 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 12:44:44 ] >>338 少なくとも、例外仕様を批判する立場からすると後者は逆。 実装の変更の際に投げる例外が増減する →例外仕様も変更する→それを呼び出す元も修正しないといけない or →例外仕様を変更しない→例外仕様が実態と乖離したものになる あと、C++の例外仕様は実行時にコストが増えるだけでコンパイル時には何もしてくれないのもマイナス。 (さらに、実行時違反していることが分かっても、基本は即座に落とされるだけで何もできない)
341 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 13:05:52 ] 例外仕様は後付けの仕様なので、いろいろと仕方ない。と言うより、元々必要ない気も。
342 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 13:10:30 ] 強制終了の為だけに例外を使う分には問題ない?
343 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 13:23:39 ] Java以外にチェック例外を採用した言語はない気がする。
344 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 13:34:42 ] C++の例外仕様って、コンパイル時じゃなくて、実行時にエラーになるんだろ? あんまりうれしくないよな。
345 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 14:45:38 ] >>338 例外仕様は手間をかけてもメリットがなかった。 ただ、throw()はメリットがあると思う。
346 名前:デフォルトの名無しさん mailto:age [2009/10/04(日) 15:00:35 ] επιστημηです。 --- "[cppll:1531] Re: property (言語拡張について)" / Shin'ya MORINO / 2002/02/21 14:12:27 +0900 --- >> DDJ 1997.02/03 オブジェクト指向的日常 # '日常本'のオマケにPDFアリ >今、手元に無いんですが、もしかして、やってました? やってましたー # 長年C++と付き合ってると、大抵のことはやってるなーって我ながら感心します。 # 僕ってすごい? ^^; (どっかのWeb-pageで'神のような人'と書かれていた...) -----:-----:-----:-----:-----:-----:-----:-----:-----:----- FUKUDA (episteme) Fumiki -- magical, but never a magic...
347 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 17:12:21 ] 何です、これ?
348 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 17:41:00 ] C++BuilderとVisualC++は プロパティ使えるんだよな
349 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:24:00 ] テンプレート関数の引数にポインタを渡して、 テンプレート関数の内部ではポインタの内容が書き換わっているのですが、 関数から戻ってくるとポインタの内容が元に戻ってしまいます。 何故でしょうか?
350 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:39:31 ] >>348 C++の仕様には含まれてなくて、各処理系の言語拡張だよね? だから使わないほうがいいのかな?
351 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:49:34 ] >>349 テンプレ関数の宣言と、呼び出してる部分と、引数に渡している値の宣言部分と、 テンプレ関数内のその引数を操作している部分を書いてください。
352 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:49:37 ] >349 一番可能性が高いのはおまいの勘違い。 最小限のコードでも載せないとまともな回答は望めないかと。
353 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 18:50:54 ] >>349 ポインタを参照で渡せば?
354 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 19:30:06 ] >>352 の言うとおりだろう。 どこかでコピコンが働いてんだよ。
355 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 19:35:46 ] コピコン可愛いお
356 名前:349 mailto:sage [2009/10/04(日) 19:50:39 ] >>353 の仰るとおり、ポインタを参照で渡したらポインタの内容が 保持されました。 コード部分なんですが、リスト構造のポインタだったので、 操作している部分が長く、見にくいかもしれませんが 書いたほうがよろしいでしょうか? 皆さんレスありがとうございます。
357 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:20:28 ] 教えてください VS2008で作ったCのプログラム(ただのハローワールド)を 別のマシンで実行させるにはどういうモジュールが必要なんでしょうか .exeファイルをもっていって実行させてもエラーで動作しませんでした
358 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:27:52 ] >>357 wine
359 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:29:20 ] >>357 CRTをStaticにLinkするんだ
360 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:34:15 ] >>357 .NET Frameworkがいるんじゃね?
361 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:14:07 ] 別のマシンが何なのかも書いてないのに、お前ら適当なw
362 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:14:58 ] >>349 はこのレベルの解説から読んだ方がいい気がする ttp://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/C++2/06/06-02.html
363 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:18:55 ] >>362 だったらまずお前が読めよ
364 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:20:37 ] お前は何を言ってるんだ
365 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:21:29 ] 自分でも何を言ってるのかわからん
366 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:32:50 ] >>358-361 すいません。別のマシンってwindowsXPのデフォルトインストール状態のマシンです なんかライブラリがいるって聞いて、何かをインストールしなきゃいけないのかな?と思い質問しました。 .net frameworkかなと思ったのですがCなのに?という疑問がありました。 ちょっと試してみます
367 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:36:50 ] >>366 .net frameworkじゃなくてCランタイム
368 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:44:54 ] 364 :デフォルトの名無しさん:2009/10/04(日) 21:20:37 お前は何を言ってるんだ wwwwwwwwwwwwwwwwwwwwwwwwwwwww
369 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:48:08 ] >>366 32bit/64bit 問題だったりしてw
370 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:55:35 ] デバグビルドしてるんだろ
371 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:08:09 ] >>367 なるほど。。正確にはCランタイムが必要で .net framework入れるとCランタイムが入ってくるということですね 入れる対象マシンは私のじゃないのでモジュールだけ入れたいのですが >>359 さんの方法が可能なのですかね?ちょっと調べてみます >>369 その問題がよくわかっていませんがどちらも32bit環境です
372 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:10:44 ] >>371 これは独り言だけど、コンパイルしたときの条件とか設定とかをちゃんと書くといいかもよ。
373 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:38:18 ] Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86) www.microsoft.com/DOWNLOADS/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=ja ...
374 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:42:59 ] こっちのほうが新しい。 Microsoft Visual C++ 2008 Service Pack 1 再頒布可能パッケージ ATL のセキュリティ更新プログラム www.microsoft.com/downloads/details.aspx?FamilyID=2051a0c1-c9b5-4b0a-a8f5-770a549fd78c&DisplayLang=ja
375 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:18:31 ] 質問です。VC9EEで開発しています。 以下のような関数を書いたんです。動機は自作コンテナのオブジェクトプール用のイニシャライザです。 以前の環境をリセットして再利用できるように初期化します。 で、てきとーなテストではうまくいきました。つまり、クラスや構造体のメンバ変数を0にできました。 さて、このコードはセーフなのかアウトなのか知りたいです。メモリリークなどはしてないみたいです。 そのほかにも、もっと簡単な代替手段があればご教授ください。お願いします。 template<class T> bool ZeroInitializer(T& in){ void* Mem = calloc(1,sizeof(T)); if(Mem == NULL) return false; T* Temp = new(Mem) T;//<new>をインクルードしないと使えない。 in = *Temp; delete Temp; // free(Mem); return true; }
376 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:38:25 ] >>375 です。 今日はもう寝るので明日また見に来ますです。 よろしくお願いします。
377 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:43:37 ] >>375 何か無用に難しいことやってるね。 memsetで万事解決。
378 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:48:23 ] >>375 in = T() で十分だろ。 それは別としても、そのコードはアウト。 calloc() で確保したメモリは free() で解放しないとだめ。 あと、 new(Mem) T で例外が発生するとリークする。 そもそも calloc() 使って 0 初期化とか言ってる時点で T に だいぶきつい制約があるんだろうけどな。
379 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:49:09 ] >>377 C++ で memset() はねーよ。
380 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:50:25 ] >>375 メモリリークしてるかどうかはどうやって判断したの?
381 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:51:08 ] >>379 ゼロクリアする必要があるみたいじゃん。
382 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:57:15 ] >>377 ,381 www.kijineko.co.jp/tech/superstitions/initialization-by-memset.html www.kijineko.co.jp/node/163
383 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:58:19 ] fill_nとかでいいじゃん。
384 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:00:25 ] >>382 いや、それは分かるけど、375はゼロクリアが必要だって言ってるんで。 関数名がZeroInitializerだし。 クラスのオブジェクトを初期化したいだけなのなら、話は変わってくるけど。
385 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:02:40 ] つまり calloc() の後にコンストラクタを走らせてるのが意味不明ってことで。 あとは 375 本人に語らせるしかない。
386 名前:375 mailto:sage [2009/10/05(月) 00:07:26 ] >>377 コンストラクタを呼ぶ前ならいいけど、VTableまで0にしちゃったらもんだいないかな?
387 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:09:21 ] >>386 寝たんじゃないのか。 とりあえず、なぜゼロクリアしたいのか、話を訊こうか。
388 名前:375 mailto:sage [2009/10/05(月) 00:11:09 ] 途中で投稿してしまった。 >>380 VCの<crtdbg.h>の関数でやりました。 >>381 & >>384 ごめんなさい。とりあえず、現在の状態をリセットできればZEROじゃなくてもいいです。 布団入る前に見にきてよかった。
389 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:12:26 ] じゃ、378で終了だな。
390 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:14:53 ] >>388 メモリプールみたいなものを作るならEfficient C++でもみて勉強すれば?
391 名前:375 mailto:sage [2009/10/05(月) 00:23:10 ] 時間があるので、細々と。 何で、こんなことしようかと思ったかというと、N分木のツリーコンテナを作ったのが始まりです。 このコンテナはテンプレートになっていて、いかなるTをも食います。 無難な初期化法を模索している時に、VCのstd::vectorの中身がかならず0で初期かされていることを思い出しました。 で、これをうまく取り込もうと思ったのでそういうコードを書きました。 >>389 >>378 では問題がでないなら、それで終了です。 ちょっと大丈夫か不安だったんですが、まぁ、責任はユーザクラスに投げてしまうのもいいかなぁ。。。 >>390 まず本を買わないと!ですね。 とりあえず方向性が見えたのでそれで何とかしようと思います。 変な質問でしたが誠実に答えていただいてありがとうございました。 ぐっすり寝れますよ。;)
392 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:51:58 ] std::vectorの場合は、T()、つまり値初期化されるので、intやPODな構造体だと結果的に0初期化になる。 だから、とりあえずは>>375 のコードのnewのところをnew(Mem) T();とすればいい。Tの後の括弧が重要。 (コピーコンストラクタなど)コンストラクタに引数を渡す場合もここで渡すこと。 そして、この要素を削除するときにはTemp->~T();でデストラクタを呼んでからfree(Temp);する。 こうすれば、コンストラクタ・デストラクタを持つクラスでもきちんと動くはず。 本格的にやるなら、std::vectorみたいにテンプレート引数でアロケータを取るようにする。 malloc→allocate new(void*)→construct ~T→destroy free→deallocate アロケータのメンバはこう対応する。
393 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 01:02:20 ] きめぇコードだなw テンプレートで書いたら保守なんてできたもんじゃないな
394 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 01:21:45 ] >>392 T に制約を設けないならコンストラクタからの例外にも気をつけないと。
395 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 14:01:33 ] >>392 詳細ありがとうです。T()でも問題なさそうなのでそれで行きます。 元々は自分の認識の甘さが原因ですね。もっと精進したいと思います。 ありがとうございました。
396 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 14:15:44 ] > Tの後の括弧が重要。 括弧はなくてもいいと思うが。あってもいいけど。
397 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:24:36 ] vectorのイテレータiから要素へのポインタpを得る方法がわからず、 詳しい知人に聞いたら、 p = &*i; いうやり方を教えてくれました。なるほど確かに動いているのですが、 一見無意味な変換をしているようで気持ち悪いです。 こういうやり方って一般的なんですかね。
398 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:41:42 ] >>397 一般的だと思う。 「自分の環境のvectorのイテレータはポインタで実装されているから」といって、 イテレータをそのままポインタとして使う方が気持ち悪い。
399 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:43:02 ] >>397 vectorのイテレータはランダムアクセスイテレータなので、機能的にはほとんどポインタと変わらない。 (*it)ってやれば、要素を返してくるので、それのアドレスを返せばポインタへの変換はできる。 でも、俺もキモイと思う。一般的かは別として。。。
400 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 19:33:23 ] >>397 一般的というか、普通にそれが正解だし、中身を理解してくれば不自然さも感じなく なってくるかもしれないし、なってこないかもしれない
401 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 19:55:32 ] VC++2008では、こういうマクロが機能します。 C++の標準としては、引数付きマクロに型引数を指定してもいいんでしょうか。 #define foreach_vector(T, v, i) \ for (std::vector<T>::iterator i = v.begin(); i != v.end(); ++i) std::vector<int> vec; ... foreach_vector(int, vec, i) { ... }
402 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 20:00:52 ] 型引数といってもプリプロセッサにとっては単なる文字列に過ぎんから 何を指定してもようござんす。
403 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 20:17:26 ] >>401 最終的なC++の文章として整合性の取れた置換がされれば、コンパイラさんは疑ったりしない。
404 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:12:13 ] >>396 コンストラクタを持つクラスなら確かにどっちでも同じだけど、そうでない組込型やPODだと違うの。 new intだと、int i;のiのように初期化されなけど、new int()は0初期化される。 まあ、たしかにstd::vectorはT()をコピーコンストラクトして0にするので、 これは使っていないはずだけど。
405 名前:デフォルトの名無しさん [2009/10/05(月) 22:27:53 ] mpg又はmp4、wmv, aviといった動画のファイルフォーマットを詳しく書いたHPありませんか? 1024バイトはヘッダーとか、ここからデータが入ってるとか、そういったことが知りたいです。 動画再生ソフトをC、C++でガリガリプログラムしてみたいと思ってます。よろしくお願いします。
406 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:32:19 ] >>404 へぇ
407 名前:デフォルトの名無しさん [2009/10/05(月) 22:35:01 ] コンテナの最終要素からの後置インクリメントの対処って、やっぱ最終要素の場合インクリメントしないしかないのかな?
408 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:37:48 ] 境界線系のエラーは結構凶悪だから、何もしないか、レンジエラーの例外投げるかするといいと思う。
409 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:38:40 ] >>405 フォーマットがわかったくらいじゃ再生できなくて 結局規格書が必要になるから最初から規格書手に入れたほうがよい つーか何人もの熟練のプログラマが関わってても バグが出るのが動画の世界なのに そんなことも自分で解決できないレベルじゃ間違いなく挫折する いや、むしろ俺が挫折した 悪いことは言わないからDirectShowにでも頼ったほうが早い
410 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 00:03:01 ] >>405 高い山を目指すのも悪くはないけど山の高さを知るためにもまずは JPGあたりからはじめたらどうかな? 挫折すること請け合い
411 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 00:29:26 ] jpgですら難しいのに動画とか無理だろそもそもソフトウェアエンコードでまともな速度でるのか初心者はBMPから始めろ
412 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 01:36:50 ] そういえば 漫画とかイラストとか、基本は白黒で線とベタとトーン、それに活字で出来ている絵、 これって、一般的にはBMPからJPGに圧縮してるけど 線や字(フォントの種類)等を判別する方法をうまく考え出せば JPGとかに比べて、ずっと圧縮率を高くすることも出来ると思うんだ。 もう既に作られているのかもしれないけど。
413 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 01:45:16 ] 自動ベジェ曲線化とか? 難しそうだ。OCRは何とかなるか。
414 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 01:49:07 ] グレイスケールで十分じゃね?
415 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 01:52:58 ] イラストレータとかのベクターフォーマットがそんな感じじゃね? でも、線の強弱やかすれ、ベタフラッシュやホワイト、トーン削りなんかを考えたら、 jpgとかで十分だと思うよ。
416 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 01:56:21 ] potraceでぐぐれ
417 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 02:07:11 ] 強弱・かすれ・トーン削りみたいなのをきれいに残したいなら むしろ8bitグレースケールにしてPNGだろうな サイズは増えるだろうけど「無劣化」はでかい ちなみにJPEGにもグレースケール専用の色空間定義がある 読み書きできないソフトも多いだろうけど
418 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 06:47:55 ] 最小化された(子)ウィンドウのサイズをMoveWindowで変更し、 そのウィンドウを標準化すると、指定サイズに変わっている というのをやりたいのですが、サイズが変わってくれません。 いい方法がありましたら教えてください。
419 名前:デフォルトの名無しさん [2009/10/06(火) 15:21:59 ] >>418 SetWindowPlacement
420 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 21:23:35 ] www.geocities.jp/ky_webid/win32c/025.html のページの LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); について質問ですが、これはLRESULTという型のCALLBACK WndProcという関数でしょうか? それともLRESULT CALLBACKという型のWndProcという関数でしょうか?それともまた別でしょうか? 前者のような気がするんですが、いじってみてもうまくコンパイルできません。 たぶん自分のレベルでは追いつかないような記述だと思うのですが、分からないままだと悲しいので答えだけ教えてください
421 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 21:26:26 ] LRESULT => 返り値 CALLBACK => 呼び出し規約 WndProc => 関数の名前
422 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 21:28:49 ] >>421 呼び出し規約というのは初耳です。調べてみます。 ありがとうございました〜
423 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:39:17 ] >>419 ありがとうございます。
424 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 23:18:53 ] 呼び出し規約って何者なの?
425 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 23:24:38 ] wikipediaのページの左上にある画像に「ワィ」ってあるけど、本当は「ウィキペディア」の「ウィ」のつもりの誤字なんだってね。
426 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 23:45:55 ] >>424 関数呼び出すための約束事。 アセンブリになったときのお約束で、他言語との協調とかそういうときに役に立つ。
427 名前:デフォルトの名無しさん [2009/10/06(火) 23:56:12 ] 質問です。 kern protection failureってどういうエラーなのでしょうか? たとえば char *str = "aiueo\0"; で初期化した文字列に対して *str = 'o'; を実行したときにこのエラーが出てしまいます。 使用OSはMAC OS Xでgccを用いてコンパイルしています。
428 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 23:59:00 ] 多分、書き込み禁止領域に書き込んだから怒られてる。 それは配列として確保してないから改変不可だ。
429 名前:427 mailto:sage [2009/10/07(水) 00:13:26 ] >>428 説明ありがとうございました! 宣言だけ行って、mallocで領域を確保したらうまくいきました 追加で質問させていただきたいのですが、 宣言直後のポインタは基本的に書き込み禁止領域のアドレスを指しているのですか?
430 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:17:21 ] そりゃヌルポといってだな どこさしてるかわからん超危険ポインタ 下手したらOSの挙動に割り込んでHDDをぶっ壊すかもしれない ってたまに聞くけど本当かどうかはしらない。使ってみてはどうでしょうか
431 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:24:22 ] int a[1]; a = malloc(x); これって別に問題はおこらなそうだけどやったらだめなの?
432 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:29:49 ] やってもいいけどコンパイラに怒られる
433 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:37:49 ] >>429 初期化されてない自動変数のポインタは、大体の処理系ではスタックのメモリに 残っていた値が入っていて、元がint型の値だったりしたとき、全く関係のない アドレスが入っていたりする。たまに書き込み可の領域を指してることもあることは あるが、大体は書き込んだらSegmentation faultで落ちる。
434 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:38:36 ] むかーし、俺も初心者だった頃、同じようなことをしようとして出来なくて悩んだな。 今にして思えば、単に配列とポインタを理解してなかっただけだが。
435 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:50:33 ] >>430 モダンなOSなら、ちゃんと例外を投げてくれるけどね。
436 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:19:28 ] ちなみにヌルポをfreeしたりdeleteしたりするのは合法
437 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:21:30 ] 切り替え機のPS2ポートにキーボードをつながないで もう一台のlinuxPCのRS232Cのポートから変換コネクタを かませて切り替え機につなぐことは出来ますか? 切り替え機に大して送るキーボード信号をソフト的に エミュレーションしたいので可能かどうか悩んでます。 linuxスレで聞こうかと思いましたが、閑散としていたので こちらで聞きました。 アドバイスがあればよろしくお願いいたします。
438 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:24:44 ] ■実現したい事柄 TabControlで、タブの入れ替えをドラッグアンドドロップで行いたい。 ■備考 下記URLはC#でのソースです。 ttp://watcher.moe-nifty.com/memo/2009/02/ctabcontrol-b32.html 備考欄のURLの内容をC++で実現してあるソースはありませんか?
439 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:29:40 ] >>430 それヌルポじゃないよ ヌルポはヌルポであって、未定義とは全く違うよ
440 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:38:05 ] Cのポインタは未初期化でも何かしら指しているものな。
441 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:41:28 ] >>430 実アドレス上で動かないからOSには多分被害ないと思うが。。。
442 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:49:05 ] >>424 関数の呼び出し方をアセンブリ言語レベルで規定したもの。 引数はスタックに積むのかレジスタに格納するのか、スタックに積むなら順番はどうか、 レジスタを使うならどのレジスタにするのか、とか諸々のルールがある。 呼び出し規約の指定を間違えると、関数を正しく呼び出せず、クラッシュする。 アセンブリ言語で関数を書くのでなければ、中身は知らなくても名称さえ知っていれば大丈夫。
443 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 02:34:07 ] C++勉強中のものです。 数メガサイズのファイルを読み込み、そのデータをメモリ内にアプリケーションが 終了するまで持ち続けるようなプログラムを作成したいのですが、読み込んだデータを持つ方法で悩んでいます。 複数のクラスからアクセスするようなデータ場合、usingを使いグローバル変数に格納するのが一般的なのでしょうか? なんとなく、C++ではグローバル変数を使用するのがタブーになっているような思いがあるので質問させていただきました。
444 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 03:15:20 ] グローバルにするのは一般的じゃないので普通に持ち回ればいいと思う。 持ち回り方はC++だからといって何か特殊な方法でもないよ
445 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 03:28:48 ] >>443 そこでMediatorパターンですよ。
446 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 04:20:08 ] >>440 初心者スレで嘘つくなよ。
447 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 04:29:49 ] どこか分からないが、どこかを指しているというのを言ってるんじゃ
448 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 04:38:06 ] linuxのjfbterm上で動くコンソールアプリをC(gcc)で作ってるんだが ncursesのboxのボーダーが文字化け(?)してる。 なんか技がある? スレ違いだったら誘導してくれ。
449 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 04:46:06 ] >>447 指していない可能性だってあるんだぜ。ぬるぽとか。
450 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 04:51:11 ] へぇ。じゃあ、0番地を指すポインタは作れないのか
451 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 04:52:39 ] >>448 どう化けてんだ? \が¥になるのはフォントのせいだけど。
452 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 05:00:01 ] >>451 多分、フォントのマッピングが違ってて、それで文字化けしてるんだろうけど box (subwin_1, ACS_VLINE, ACS_HLINE) でサブウィンドウを囲ってやろうと すると、縦の線が上付きの「3」になって、横の線はなにも表示されない。 なんかいいアイデアない?
453 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 05:08:12 ] ヌルポと同じビットパターンの番地を指すポインタは当然作れないよ(作らなくても いいようになってるし) どんなビットパターンかは処理系依存で、0に等しいとは限らないけど、コンパイル タイムでポインタにキャストされた0はヌルポ扱いをすることになってる まぁこの辺はいまいち分かりにくい仕様だと思うし、C++0xではnullptr_t型のnullptr というものがとうとう導入されることになった訳だけど
454 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 05:11:28 ] www.kouno.jp/home/c_faq/c5.html ぬるぽの知識が曖昧な奴はこれ嫁
455 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 05:30:55 ] >>452 localeを見直してみるとか?
456 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 05:33:43 ] つまり自動変数として生成したポインタの初期化を行わなかった場合に、 それがたまたまヌルポになる可能性があるから、未初期化でも 常にどこかを指すというのは間違いであると
457 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 06:24:43 ] Win32だと0x7fff以下がぬるぽってことになるんだな。
458 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 09:17:26 ] >>443 シングルトンでも使えばいいじゃない
459 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:39:06 ] Listなどに代表されるコレクション?について教えてください。 自分で書いたクラスをインスタンス化し、それをListとして格納して扱うにはどうすれば良いのでしょうか? まぬけな質問に見えますが、非常に困ってます。 C#で書いた場合、こんな感じになります。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9969.txt C++で書くにはどうすれば良いのでしょうか?
460 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:49:59 ] >>458 グローバル変数はダメなのに「シングルトン」ならダメじゃなくなるとでも思ってるのか?
461 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:50:41 ] >>459 std::list<...>
462 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:05:20 ] >>460 まったく別なんじゃないか?
463 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:22:52 ] >>460 なんでグローバル変数がだめだとシングルトンもだめになるって思ったの?
464 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:33:49 ] >>462-463 まだこんなこと言う人がいるんだな。初心者スレだからしょうがないか。 ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0 > グローバル変数は、通常その非局在性によりはっきりと悪しき慣習と考えられている。 ここで挙げられているような非局所性とそれによる問題点はグローバル変数でも シングルトンでも同じこと。 また、それを許容するとしても、ふつうにグローバル変数やフリー関数が使える (クラスが不要な) C/C++ ではわざわざシングルトンパターンと呼ばれるような まわりくどい構造を持ち出す意味が無い。 www.google.co.jp/search?q=%22%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%83%88%E3%83%B3%22+%22%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0%22
465 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 14:14:14 ] >>461 コレクションがどうこうより、クラスの扱い方のところで既に間違ってました。 スレよごしすみません。 vector<Item> vItem; //newが不要 //vItem.push_back(new Item(2 "pc")); vItem.push_back(Item(2, "pc")); vItem.push_back(Item(3, "box")); for(int i=0; i<vItem.size(); i++){ cout << "no:" << vItem[i].no << " name:" << vItem[i].name << endl; }
466 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 14:47:26 ] >>464 初期化順の制御とかしたくなることない?
467 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 15:52:01 ] シングルトンとかグローバル変数を使うと、周りを癒着しちゃってモジュール化するとき弊害になるんだよな。 グローバル変数とか使うなら、一個のクラスのメンバ変数にしてモジュールにしてしまうほうが再利用性を確保できる。
468 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:33:49 ] コマンドラインで引数を受け取ってローカルアプリのAPIをコールするexeを 作成したいんですがどこか参考になるサイトご教授願いませんか? オブジェクト指向は理解してますがwindowsのプログラムは超初心者です。
469 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:43:18 ] Windowsのプログラムが超初心者なら、どのOSのプログラムなら初心者じゃないんでしょうか。
470 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:48:48 ] >>468 私はあなたではないので質問の意味が分かりません 他の人にわかるように書いてください
471 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:50:45 ] >>468 ローカルアプリというのは何を指していますか? APIは何万個もあるわけですが、どのAPIをコールしたいのですか? コマンドラインで受け取った引数は何に使うのですか?
472 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:05:31 ] >>471 Skypeで特定ユーザーにメッセージを送信、ムードメッセージを送信、オンライン、オフラインの切り替えなどです。 Firefoxのadd-onを作成しているのですがActiveXのSkype4COM.dllが使用できないため exeでなんとか操作できないかと。
473 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:11:02 ] >>472 exeじゃなくてwscriptで十分。 Skype4Com WScript でググレ。
474 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:12:56 ] >>472 https://developer.skype.com/Docs/Skype4COM ここの referenceguide とか examples ちらっと見る限り exe での操作はできるよ
475 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:21:43 ] >>464 wikipediaってwww
476 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:33:14 ] >>468 その書き方だと、既成のEXE内の関数をコールしたいとか、あらゆる可能性を引きずってる。 もうちょっと限定してくれ。
477 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:41:39 ] プログラム全体から呼び出される可能性のあるものはシングルトンにしてもいいだろうよ。
478 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:42:26 ] >>476 >>468 = >>472 みたいだ
479 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:56:05 ] グローバルかシングルトン使わないと延々とポインタを引数にリレーとかしないといけないからめんどくさいじゃん
480 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:57:59 ] ぶっちゃけシングルトンにしていいようなものはグローバル変数にしていいと思う gotoと同じく完全排除が常に善ではないし、gotoよりは使ってもいい ただ無闇に使うなってだけ
481 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:02:08 ] >>478 おっとすまない。俺が読めてなかったみたいだ。
482 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:04:37 ] グローバルとシングルトンは全然違うだろ。 シングルトンはグローバルとファイル内にスコープの閉じたstaticグローバル変数の中間くらいの性質をもったものでグローバルより安全で使いたい場所でだけゲットできる
483 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:05:13 ] 唯一のインスタンスにアクセスするメソッドだけを持ったクラスを継承させたほうがいいとおもう
484 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:04:33 ] >>475 内容がおかしければ直せばよい。それだけだ。
485 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:00:06 ] シングルトンなんか最近はアンチパターン扱いだろ
486 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:06:29 ] >>484 便所の落書きを一生懸命書き直すバカなんかいないだろ
487 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:09:50 ] できない言い訳はいいよ
488 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:20:45 ] ランタイムコストが掛かるし、細かい罠がぼろぼろ落ちてるし、マルチスレッドには 致命的に向いてないし、下手な使い方をすればグローバルインスタンスと全く同様の 問題も抱える。 今時シングルトンなんか推奨する人はちゃんと理解してるんだろうかと。
489 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:27:54 ] 論拠にwikipediaをもってくるやつってなんなんだ。 書き直せよって言うけど、俺がぜんぜん違う内容に書き換えたら、それを信じるってことか?
490 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:28:02 ] シングルトンは「俺のコードカコイイ」な人かJava脳の人が使うもんだろ で、MTのコードを書き始めると、ダブルロッキングとか馬鹿で無意味なこと始めるか、 目が覚めて窓から放り投げる
491 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:29:41 ] うぃきぺを補強に持ってくるのはバカだけど、とりあえずうぃきぺ出典かどうか なんか無視して、中身の正しさを巡って議論すればいいと思うよ
492 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:31:50 ] 海外のフォーラムなんかも「シングルトンだって? 素直にグローバル使えよプゲラ」って感じだな
493 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:32:57 ] 値域の制限には使えると思う
494 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:46:55 ] wikipediaだからという理由で中身を見ない人って何なの?
495 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:59:59 ] >>489 だからグダグダと言い訳ならべなくていいって。 君の最大の力をもって素晴らしいページに書き換えてくれ。
496 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:12:45 ] 意味がわからない。 wikip好きすぎだろ。
497 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:02:01 ] お前の2行目の決め付けのほうが意味がわからない。 発狂するタイミングじゃないと思うんだけど。
498 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:33:41 ] >>466 >>482 「初期化順の制御」したいときにも「使いたい場所でだけゲット」したいときにも、 クラスに対してシングルトンパターンのような加工を施す必要は無いんじゃない? ふつうのクラス定義と、そいつの参照を返す関数がひとつあるだけじゃダメなの?
499 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 02:24:17 ] >>498 初期化順で俺が言いたかったのは複数のグローバルなオブジェクトがあるときね 1個だけならお好きに
500 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 02:54:52 ] >>499 オブジェクトが何個でも一緒じゃない? ふつうの関数(と静的変数)ではできなくて、「シングルトン」ならできる、っていう 初期化順の制御ってどんなのがあるの?
501 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 02:59:45 ] >>498 >ふつうのクラス定義と、そいつの参照を返す関数がひとつあるだけじゃダメなの? クラスを公開するなら、そのクラスのインスタンスがあちこちにできちゃうかもしれない。 メンバ関数じゃなくて、参照を引数に取る関数を定義すればいいかもだけど、 それならいっそ参照を外に出さないで、関数だけ公開すればいいと思う。 個人的には静的メンバ関数のみを持つクラスをよく使うなあ。 こういうのってパターン名とかないのかな。
502 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 03:09:59 ] >>501 > クラスを公開するなら、そのクラスのインスタンスがあちこちにできちゃうかもしれない。 それが嫌なら、公開するクラスは純粋仮想関数の宣言を並べただけの インターフェースクラスにしとくという手がある。 class C { public: virtual void f() = 0; virtual void g() = 0; }; C& DefaultC(); 「参照返す関数」をなるべく使わないように、できるだけ引数で受け渡すように しとけば、テスト用にダミー実装に差し替えるとかいうようなこともできる。 > それならいっそ参照を外に出さないで、関数だけ公開すればいいと思う。 あぁそういうパターンもあるよね。 C だと超ふつうだな。 やっぱりシングルトンパターンのメリットは見えてこないな。
503 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 09:31:26 ] staticなメンバ変数しか持たないのはmonostateパターンだね 見た目がシングルトンより綺麗だから俺もこっち使うけどメリットデメリットはよくわからん・・・
504 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:18:34 ] 継承できるできないとかコンストラクタが呼ばれない呼ばれるの差じゃね
505 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:56:21 ] 質問です。 32ビットのXPで、出来るだけ最適化をかけられてフレームポインタが無い .exe は、 原則として関数(インライン化されたものを除く)のコール順というのは分からないんですよね? それなのに、VisualStudioとかで見ると、呼び出し履歴が見えるのはどうしてでしょうか。
506 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 11:11:59 ] >>505 最低限、関数からリターンするためには呼び出された元の位置を知っていないといけない わけで、どんなに最適化してもプログラムが実行可能である限りその情報は存在している。 CPU が関数からリターンするときにそういった情報を使うのと同じように VisualStudio などの ソフトで情報を読み取れば、最低限の呼び出し履歴の表示は可能。 さらにバイナリに残っているシンボル情報やコンパイル時に生成できるデバッグ情報などを 加えれば、関数名や引数の表示までだいたい可能になる。
507 名前:505 mailto:sage [2009/10/08(木) 11:28:37 ] >>506 ありがとうございます。 StackWalk (StackWalk64) 関数でスタックトレースしようとしても、 フレーム有りだと上手くいくのですが、無しだと上手くいきません。 msdn.microsoft.com/ja-jp/library/cc428994.aspx の引数 FunctionTableAccessRoutine のところに、x86 だと fpo にアクセスすると 明記されてるので、上手くいかなくて当然なのかもしれないんですが、 なんとかアクセスできるようにする方法は無いでしょうか?
508 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 11:38:15 ] >>507 「上手くいきません」って言われてもな。 問題を再現するためのコードと期待した結果と実際の結果を用意して Windows API スレへどうぞ。 Win32API質問箱 Build82 pc12.2ch.net/test/read.cgi/tech/1253699773/
509 名前:505 mailto:sage [2009/10/08(木) 11:53:55 ] >>508 ありがとうございます、こっちで聞いてみます。
510 名前:472 mailto:sage [2009/10/08(木) 18:13:02 ] >>474 を参考にexeを作成して一通りSkypeの操作は可能になりましたが コマンドラインオプションで文字列送信で文字化けして躓きまました。 メッセージ送信は_bstr_t型なので /*内部処理*/ char *orig = "こんにちわ!"; _bstr_t bstrt(orig); pSkype->SendChatMessage("echo123", orig); /*オプション文字列*/ //int _tmain(int argc, char* argv[]) char *opt = argv[1];//こんにちわ!" _bstr_t bstrt2(opt); pSkype->SendChatMessage("echo123", opt); /*出力結果*/ orig -> こんにちわ! opt -> S0・k0a0・ 何が問題なのかご教授よろしくお願いいたします。
511 名前:デフォルトの名無しさん [2009/10/08(木) 18:17:42 ] Mac OS XとLinuxとFreeBSDでは OpenGLのヘッダやライブラリのファイルのある場所が違うので これらのどこになってもmakeが一発で通るように Makefileを書きたいのですが どういう風に書けばよいのでしょうか?
512 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:19:33 ] >>511 makefile を分ける ライブラリパスを追加しまくる configure を書く
513 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:33:47 ] はじめまして。 いきなりですが質問をさせてください。 携帯向けの会員サイトを構築したいので、いくつかの携帯サイトを参考にしてよさそうなのを見つけたのですが、 どこで配布されているものなのかわkりません。 またはシェアウェアや、どこかの会社に委託して構築されてるものなのでしょうか。 www.google.co.jp/search?hl=ja&q=userLoginOpen.php&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja これらはすべて同じシステムのようなのですが、配布元を教えていただけないでしょうか。 よろしくお願いします。
514 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:39:07 ] >>513 鼬害。
515 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:41:18 ] >>511 automakeあたりを使えば良いんじゃね?
516 名前:デフォルトの名無しさん [2009/10/08(木) 20:05:50 ] Linuxのgcc4.3.3では #include <limits> でコンパイルエラー起こした #include <climits> を代わりにインクルードさせた通したんだけど いいんでしょうかね、これで
517 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 20:09:39 ] >>516 C++ ならおk C言語ならNG
518 名前:510 mailto:sage [2009/10/08(木) 20:46:10 ] 自己解決。 UnicodeにShift-jis渡してりゃ化けるわw あほだ俺w
519 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:10:11 ] どのUnicode
520 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:17:51 ] >>516 Cではふつう #include <limits.h> と書く。
521 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:06:54 ] 環境変数はグローバル変数だから使用禁止
522 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:09:00 ] エスケープについての質問です。 下のようなソースで、 main(int argc, char *argv[ ]) 実行イメージが下のように、 入力ディレクトリ、出力ディレクトリの場合に > xxx.exe inDirPath outDirPath main関数ですぐにDEBUGすると、通常なら argv[1] : inDirPath argv[2] : outDirPath のようになると思います。 しかし、下の場合だと > xxx.exe "inDirPath\" outDirPath argv[1] : inDirPath" outDirPath argv[2] : 不定値 のようになってしまいます。 おそらく、 "inDirPath\"の\"がエスケープされ、文字の"となってしまい、 閉じる"がなくなってしまったためだと思います。 このような場合、プログラム上で回避できる策はあるのでしょうか? 無理そうなら、マニュアルに記載しようと思います。
523 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:20:31 ] \という文字がほしいなら\をエスケープして\\と書く。
524 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:35:59 ] すみません、それはつまり プログラムを実行する人に向けて、\は\\と書いてください、と マニュアルに書くしかないということでしょうか?
525 名前:デフォルトの名無しさん [2009/10/08(木) 23:41:17 ] 質問の趣旨とは異なる回答だけど、 プログラム内部でディレクトリパスの末尾に¥が付いてる必要があるなら 入力時には¥の有り無しどちらでも受け付けるようにしておいて プログラム側で末尾を判定して¥を付加してやればいいね \"が"になってしまうのは使う側の責任。だけどそもそも末尾に¥を要求しなければ そういうミスの発生件数も少なくなる
526 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:43:45 ] >>524 それはコマンドプロンプトのせいだからどうしようもないね 対策はダブルクォートが出てきたら \" だと解釈して自分でパースするくらいかな
527 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 00:29:29 ] 昇順にソート済みの vector<int> v があり、その中から int min 以上、int max 以下の値を列挙したいとします。 これがmin以上max未満ということなら、次のようにすればよいと思いますが、 vector<int>::iterator imin = upper_bound(v.begin(), v.end(), min); vector<int>::iterator imax = lower_bound(v.begin(), v.end(), max); for (vector<int>::iterator i = b; i != e; ++i) 「max 以下」となると、どうするのがスマートでしょうか? for の前に if (imax != v.end()) { ++imax; } とか書くのはちょっとベタすぎる気がするんですけど、そんなものですかね。
528 名前:527 mailto:sage [2009/10/09(金) 00:31:59 ] すみません、自己解決しました。 vector<int>::iterator imax = lower_bound(v.begin(), v.end(), max + 1); でいいですね。
529 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 00:42:20 ] >>525 プログラム内部では、末尾に¥を付ける必要特にないのですが やはりユーザー側から「¥”」のような指定をされてしまうと プログラム側では防ぐことはできなさそうです。 >>526 文字列に「”」があったら、パースするというのも考えたのですが パース後に残った文字列のどこからどこまでが第二引数、第三引数かの判定が難しいです。 (実は第三引数まであり、それぞれ半角スペースが入る可能性有り。) もう少しやってみますが、 おそらくマニュアルに記載するのが良さそうに思います。 ご回答ありがとうございました。
530 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 00:43:21 ] >>527-528 > vector<int>::iterator imin = upper_bound(v.begin(), v.end(), min); これをループの始点に使うんだよね? それなら lower_bound() じゃね? > vector<int>::iterator imax = lower_bound(v.begin(), v.end(), max + 1); こっちは upper_bound(v.begin(), v.end(), max) じゃね?。 ...|1|2|3|4|5|... と並んでるとき、 lower_bound(3) は 3 の前の境目で、 upper_bound(3) は 3 の後ろの境目、だと覚えてるんだけど、違ったかな?
531 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 06:54:56 ] >>527 max+1するなら、両方lower_bound()だな。 iminをupper_bound()で得ると、重複した値を取りこぼす。
532 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 09:38:15 ] >>526 つ[ディレクトリ記号は/でおながいします]
533 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 10:16:01 ] >>490 Javaはシングルトンの使い道があるん?
534 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:31:26 ] void test(int x[]){cout << sizeof x << endl;return;} int main(array<System::String ^> ^args) { int x[] = {1,2,3,4,5}; test(x); cout << sizeof x << endl; } ■出力結果 4 20 なんで両方とも20にならないんでしょうか?
535 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:34:33 ] >>534 ここ行って聞け C++/CLI part3 pc12.2ch.net/test/read.cgi/tech/1206447234/
536 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:37:16 ] >>535 ありがとうございます。
537 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:40:20 ] >>534 エラーもしくは警告にならないのそれ まぁそれは実質的に void test(int *x) というプロトタイプと解釈されるから
538 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:59:43 ] >>537 エラーも警告もでません。 これは普通はやらない書き方なんですね。 だいたい理解できました。 test関数内ではポインタx単体の大きさをsizeofで見ていて、main関数内では配列全体をsizeof見ていると。 ということはこの場合、test関数内で20という値を得る処理を書く事はできないのでしょうか?
539 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:06:48 ] C本来の配列は要素数の情報を持っていない。なので、Cで配列を引数に取る関数は たいてい別の引数で要素数を受け取るようになっている。 悪いことは言わないから、array<T>なりList<T>を使っとけ。
540 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:10:48 ] もう誘導先に行ってて遅いかもしれないが、 C++かC#のどちらか明確にして勉強したほうがよいと思うよ。
541 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:12:46 ] >>539 そうゆうものなんですね。 すっきりしました、ありがとうございます。 素直にコンテナ?を使っておきます。
542 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:18:39 ] >>540 もともとJavaを主に使っていて、C#は多少勉強した程度です。 Javaとは配列の性質が違っていたのでとまどいました。 ご忠告ありがとうございました。
543 名前:デフォルトの名無しさん [2009/10/09(金) 18:28:39 ] gccのバージョンを数字だけ出力する方法はあるでしょうか? 4.3.5なら「4.3.5」だけとか
544 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:51:35 ] ___GNUC___ ___GNUC_MINOR___ だけでは末尾の1桁が 取れないのか どうやればいいんだろう
545 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 19:12:00 ] __GNUC_PATCHLEVEL__
546 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:04:03 ] >>545 おおサンクス そしたらこうすればいいのか printf("%d.%d.%d", ___GNUC___, ___GNUC_MINOR___, __GNUC_PATCHLEVEL__);
547 名前:デフォルトの名無しさん [2009/10/09(金) 21:48:40 ] 質問です。 環境はVisual Studio.net 2003 C++ 条件は列(9)の最後尾が○の場合、 後ろから●が見つかるまでの部分を 削除して表示する ***実行前*** ○●●○○●●○○ ○●●○○●● ↓↓↓↓↓↓↓ ***実行結果*** ○●●○○●● ○●● ●○○●○○○○○ ●○○○○○●○ ○●●○ ↓↓↓↓↓↓↓ ●○○● ●○○○○○● ○●●
548 名前:デフォルトの名無しさん [2009/10/09(金) 21:49:38 ] 最大横9×縦11項目 ●○○●○○○○○ ●○○○○○●○○ ●○○●○○○○○ ●○○○○○●○○ ●○○●○○○○○ ●○○○○○●○○ ●○○●○○○○○ ●○○○○○●○○ ●○○●○○○○○ ●○○○○○●○○ ●○○○○○●○○ ↓↓↓↓↓↓↓ ●○○● ●○○○○○● ●○○● ●○○○○○● ●○○● ●○○○○○● ●○○● ●○○○○○● ●○○● ●○○○○○● ●○○○○○● このような感じで出力したい場合、どういった風に 実装すればいいでしょうか? 以上、よろしくお願いします。
549 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:59:53 ] >>547 #include <stdio.h> #include <string.h> int main(void) { char buf[1024], *p, *q; while(fgets(buf, sizeof(buf), stdin)) { for(p=buf;(q=strstr(p, "●"));p=q) { q+=2; printf("%.*s", q-p, p); } printf("\n"); } return 0; }
550 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:03:14 ] MFC使っていいなら、 CStringW s = L"○○●●○○"; s.TrimRight(L'○');
551 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:28:16 ] ***実行前*** ○●●○○●● ↓↓↓↓↓↓↓ ***実行結果*** ○●● ここがわからん。開始時に末尾が●ならそれは削除?
552 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:37:51 ] 2パスにするのが楽かな?? まず、左から右に一回配列を舐めて、最後に出てきた黒の場所思えておいて、2パス目で表示。 もちろん処理を多めに食うけど、確実じゃないかなぁ。
553 名前:デフォルトの名無しさん [2009/10/09(金) 22:43:40 ] >>549 サンクス!! >>550 サンクス!! >>551 すまん、記述ミス ***実行前*** ○●●○○●●○○ ○●●○○●● ↓↓↓↓↓↓↓ ***実行結果*** ○●●○○●● ○●●○○●●
554 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:44:15 ] >>553 ん、そっか。ミスか。 じゃあ回答でおk
555 名前:デフォルトの名無しさん [2009/10/09(金) 22:51:09 ] >>552 例えば、 for(int i=0; i<99;i++) { bool iMap[99] = getFunc( i ); } これで○=1,●=0 ってなっていた場合どうする? つまり、○ならオブジェクトが取得できていて、 ●なら何も無い状態。
556 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:54:20 ] >>555 それぐらいは自分で考えてくれ。
557 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:04:57 ] >>555 即興だから間違ってたら申し訳ないが。 static const LineLen=99; int LastBlack=LineLen; bool Map[LineLen]; for(int i=0;i<LineLen;i++){//舐める1パス目 Map[i] = GetFunc(i); if(Map[i]==false) LastBalck=i; } for(int i=0;i<LastBlack;i++){//表示。2パス目 printf("%d",Map[i]); } っていう感じ。
558 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:09:14 ] 多分9*11で99要素なんだよ。 だから2重ループにするか、lastblackを11要素の配列にしないとだめだ
559 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:28:56 ] >>557 書いた後気づいた。読めてなかったなぁ。。。 >>558 の案もあわせて採用するといいと思う。 size_t LastBlack(object* Array,size_t N){ int Last=N; for(size_t i=0;i<N;i++){ if(Array[i]==false) Last=i; } return Last; } --呼び出し-- object obj[99];//どこかで中身設定。 size_t L; for(size_t i=0;i<11;i++){ L=LastBlack(obj+9*i,9); Show(obj+i*9,L); } って感じか?? 2重ループになっちゃったな。。。 確実だが、頻繁に呼ぶにはちょっと重いかもね。。。 黒発見した時点でそれまでを描画すれば1パスでいけないこともないかも??
560 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:40:27 ] だれも素直なstrrchrとかは勧めないのか Unicodeだとしてもwcsrchrとかあったはずだし 最悪strrchrwがshlapi.hとかにあった気がするが
561 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:59:46 ] 自分の発言でグダグダになったので、フルソース書いてみた。 思っていたのとは別物になってしまった。変なこと書いて申し訳ないね。 #include <stdio.h> #include <vector> #include <algorithm> int main(){ std::vector<int> Array; size_t W=9,H=11,LD=0; Array.resize(W*H); srand(253); std::fill(Array.begin(),Array.end(),0); for(size_t i=0;i<Array.size()/4;i++){ Array[i] = 1; } std::random_shuffle(Array.begin(),Array.end()); for(size_t i=0;i<H;i++){ LD = W; for(size_t j=0;j<W;j++){ if(Array[j+W*i]==1) LD=j; } for(size_t j=0;j<=LD;j++){ printf("%s",(Array[j+W*i] == 0) ? "○":"●"); } printf("\n"); } return 0; }
562 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:21:05 ] コンパイラの警告について質問です。 環境はVS2008Expressです。 先ほど2時間悩んだ末に発見した間違いがありまして、これを警告で表示してほしいなぁと思いました。 内容は Hoge c;//Hogeはクラス if (略) c = Hoge(0); else Hoge(1); というもので、elseの後ろは本来c = Hoge(1)とすべきところを、c=を忘れてしまいました。 気づいて直した後に、警告LV3なのが悪かった、4にしようと最高である4にしました。 期待としては cが「初期化されていない可能性のあるローカル変数」として警告される。 Hoge(1)は無意味だ〜という警告(ただ、コンストラクタ内でグローバルな変数にアクセスする設計もありえるあるから、これは警告にはできないか・・・?) のどちらかを期待したいたのですが、駄目でした。 前者は特に不思議なのですが、つかわれ方が Honya(&c); というポインタ引き渡しの場合には警告にならないようなのです。 (Honya(const Hoge *p)なので、constであるから警告になってもよさそうなものですけど…) この(くだらない)ミスを再発しないためには、何か良い方法はあるでしょうか? というつかわれ方をしていたせいで、警告がでませんでした
563 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:27:48 ] >>562 Hoge c; って書いた時点でパラメータなしのコンストラクタで初期化さ れてるんでは。
564 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:30:36 ] >>562 おそらく無理 前者のcはコンストラクタが呼ばれるから初期化されているので警告は出ない。 後者のオブジェクトを作るだけという使い方も十分あるし文法上何の問題もない。 どうしてもというなら、フラグを作って何のメンバ関数も呼ばれずにデストラクタが呼ばれた場合はassertするくらいか。
565 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:37:36 ] >>563-564 あー、なるほど Hogeにはコンストラクタを書いていませんが、暗黙のコンストラクタが用意されるんでしたね… Hogeはコンストラクタのいらない型なのですが、そこでなんとかできないでしょうか? 例えるならVectorデータ型みたいなもので struct Hoge { float x, y, z; }; 相当の品なのです。 こういう構造体を「コンストラクタを無くし」て、「初期化されなかったときの利用で、警告が出るようにする」ためのオプションや修飾子はないでしょうか?
566 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:56:10 ] >>565 Hoge C=式 ?Hoge(0):Hoge(1);
567 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:01:18 ] デフォルトコンストラクタをprivateにして必ず565みたいにさせるとか。
568 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:31:28 ] >>565 Hoge* c; if (略) c = new Hoge(0); else c = new Hoge(1); scoped_ptr<Hoge> cptr(c); Honya(cptr.get()); こんな感じにするかなあ。
569 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:24:28 ] 変数宣言と初期化を別にする限り防げないように思う つまり >>567 のいうとおりデフォルトコンストラクタをprivateにして >>566 のいうような宣言と同時に初期化を必須にするしかないと思う ただ>>566 はコンパイラが馬鹿だとコピーコンストラクタが使用されそうだし 俺なら Hoge C(式 ? 0 : 1); って書きそう
570 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:29:22 ] >>568 Vectorみたいな使い方と考えると 比較的プリミティブに近くて多く使われそうだし 毎回ヒープにアクセスさせるのは大仰な上に遅くなりそうじゃね? マルチスレッドだったりしたら毎回排他制御が…
571 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 09:30:22 ] 汎用的に配列の要素数を返却するtemplate をこのように書いてみたのですが 期待している動作になりません、間違いを指摘してもらえませんか。 #include <iostream> using namespace std; template<class X> int ArraySize(X* object) { return (sizeof(object) / sizeof(X)); } int main() { int array[] = {1, 2, 9, 3, 4, 5 }; cout << ArraySize(array) << endl; //配列array の要素数を取得したいのですが・・・ }
572 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 09:36:35 ] >>566-570 真剣な検討ありがとうございます。 ポインタにするのは、ちょっと速度的にきつそうかなと思います。 570さんのおっしゃるとおり、プリミティブに近いものを想定していますので。 デフォルトコンストラクタをprivateにすると、 Hoge c; とはできませんね。 (その方法で初期化を強要しつつ)初期化で条件式を使うのは確かによさそうですが、条件分岐が3つ以上の場合に無理がありそうですね。 書けなくはないですが・・・。 else Hoge(1); のところで、「生成したクラスが使われていないようですが?」という警告があれば一番良いのですけどね…。 それを避けるためには、使ってないローカル変数への警告を抑える (void)a; と同じように、 (void)Hoge(1); と書く。とか…。
573 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 09:38:34 ] >>571 int ArraySize(X* object) ここで、単なるポインタにしてしまった以上 sizeof(object)では大きさがとれませんよ。 sizeof(配列)で大きさが正しくとれるのは、それが配列宣言されており、コンパイラがサイズを知っているからです。 ポインタと配列は似て非なるもの
574 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 09:43:32 ] template <class T, size_t N> size_t GetArraySize(T (&)[N]) { return N; } int array[] = {・・・}; cout << GetArraySize(array);
575 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:06:36 ] >>571 です >>573 >>574 ありがとうございます。 >ポインタと配列は似て非なるもの そうですね、短絡的でした。 >>574 の T (&)[N] この書き方ですが、配列の宣言が、foo[N]このような書き方がしてある配列を参照しているという、ことなのでしょうか? それから、 return N; どうしてこれで要素数が取得できてしまうのでしょうか、不思議です?
576 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:09:41 ] >>575 です 質問がまわりくどいですね T (&)[N] と T &[N] この違いを教えて頂けないでしょうか。
577 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:10:13 ] foo[N]のNこそ、要素数でしょ?w
578 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:13:42 ] >>577 あ、そうか! わかりましたw T (&)[N] と T &[N] しかし、この違いがまだ理解できません・・・・orz
579 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:49:02 ] 構文解析のルールの詳しいことはよく理解してないけど T [N] => Tの配列 T &[N] => Tへの参照の配列 T (&)[N] => T[N]への参照 となってる模様。ちなみに参照の配列はコンパイルできない このへんは仮引数名の省略とか括弧の意味とかいろいろあって直感的には理解しにくいわ
580 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 11:35:26 ] 配列へのポインタと一緒だけど、演算子の優先順位が & より [ ] の方が高いから T &a[N] は先に [ ] と結びついて a[N] つまり a は要素 N 個の配列 その個々の要素の型が T& T (&a)[N] の場合は括弧で明示してあるために先に & と結びついて &a つまり a は参照 その参照先が要素 N 個の配列 関数の引数名は省略できるので、その場合 T a[N] は T [N] に、T (&a)[N] は T (&)[N] になる というように俺は理解してる
581 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 11:41:45 ] >>579 >>580 ありがとうございます、大変よく分かりました。
582 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 20:42:52 ] stringstreamってどんな感じで実装されてるんでしょうかね? stringみたいに内部で独自のメモリ管理方法を取ってるのか、vectorのようにベタな連続メモリなのか、それともまったく違うのか・・・
583 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:21:55 ] 宜しくお願いします。このコードをコンパイルしますと error C2664: 'Point<T>::set' : 1 番目の引数を 'int' から 'int &' に変換できません。 参照を外すと、静的でないメンバ関数の呼び出しが正しくありません。となります。 どのように対処したらいいのでしょうか? #include <iostream> using namespace std; template<class T> class Point { template<class> friend class Point; private: T x_; // x座標 T y_; // y座標 public: Point(); template <class U> Point(const Point<U>& r) : x_(r.x_), y_(r.y_){} Point(T x = T(), T y =T()) : x_(x), y_(y) {} void set(T& x, T& y); }; template<class T> void set(T& x, T& y) { x_ = x; y_ = y; } int main() { Point<int> ip(12, 34); Point<long> lp(ip); Point<int>::set(12, 34); // ここで当該エラー return 0; }
584 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:26:49 ] >>583 です 補足というか、行数の関係で書けませんでした、環境はVS2005 です。
585 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:31:47 ] ごめんなさい、スレを汚してしまいました 解決しましたというか・・・・tohoho情けない × Point<int>::set(12, 34); ○ Point<int> set(12, 34);
586 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:04:28 ] いいんだよ^^
587 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:14:26 ] >583 void set(const T& x, const T& y) にする。
588 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 06:51:57 ] >>585 set という変数を用意したいのか? メンバ関数のsetを呼び出したいのかはっきりしろ。
589 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 13:34:28 ] >>583 もしsetという名前のメンバ関数を呼び出したくて、しかもインスタンス 無しで呼び出したいのなら、そのメンバ関数はstaticでなければならない
590 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 13:37:55 ] でもインスタンスがないと当然 this が無いから、x_とy_に代入しようと するとエラーになるな 質問者はその当たりをはっきり質問するように
591 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 19:02:19 ] >>583 です 皆さん、フォローありがとうございます。今回のset は変数としての振る舞いを期待していました。
592 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:01:09 ] strstrのように、あるメモリ領域から特定のバイト列を検索する標準関数は あるでしょうか。VC++2008独自関数でもかまいません。 strchrに対するmemchrのようにmemmem?なんてのがあればいいんですけど。
593 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:26:50 ] 標準関数は無いと思うけど もし何度もその探索を実行するなら (\0終端の文字列と違い、長さがわかっているのだから) BM法かなんかでの探索を自前で実装するのが良いんじゃないかね。 まあ1度しか使わないのなら、そんなことせずに 先頭文字を探してそこから比較する、いわゆる力任せ法でも充分だろうけどね。
594 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:34:09 ] std::search() とか?
595 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:05:53 ] traitsって何者なんですか?
596 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:11:55 ] 曲者
597 名前:デフォルトの名無しさん [2009/10/12(月) 11:42:45 ] #include <iostream> #include <string> using namespace std; int main(void) { string s("表示"); int i = s.find('\\'); cout << i << endl; return 0; } これを実行すると、「1」と表示されますが、-1にするには どうすればよいでしょうか?
598 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 11:56:51 ] shift_jisを使わない
599 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 11:58:24 ] >>597 string s("ひょうじ");
600 名前:597 [2009/10/12(月) 11:59:06 ] 自己解決しました。できないようです。 ml.tietew.jp/cppll/cppll_novice/thread_articles/78
601 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 12:45:42 ] ソースをSJIS以外にしてコンパイル
602 名前:デフォルトの名無しさん [2009/10/12(月) 13:30:11 ] すみません。 趣味で、VC++のMFCで、いろいろ作っているんですが、もう5年くらいやっていて だいぶというかかなり本格的なものも作れるようになりました。 自分は文系なんでよく知らないのですが、プログラマに就職しようと思えばできるんでしょうか? 今の職場は単調作業なので、ちょっと刺激がほしいです。よかったら、転職しようとおもうんですが・・・どうでしょうか?
603 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:35:23 ] プログラマ板で聞いてください
604 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:32:08 ] >>602 貴方の人生こんな初心者スレで聞いて棒に振ってもいいんですか??
605 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:44:51 ] 関数ポインタの配列を使った関数呼び出しはc++ではどうやって実現させたらいいですか
606 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:47:56 ] >>605 Cと何かちがったっけ??
607 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:48:10 ] 普通の関数はCと同じ。 クラスのメンバ関数の関数ポインタは手を出さないほうが身のため。
608 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:14:10 ] 初心者なので詳しく答えられる方だけ回答お願いします
609 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:15:19 ] 初心者なのできちんと説明できない人は口を出さないでください イライラします
610 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:19:24 ] 初心者ならどんな回答も学ぶべきことがあるはずなのでありがたく思うべきです
611 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:20:50 ] 初心者なのぐぐれません。
612 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:21:32 ] 初心者なのでよみとれません。
613 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:23:43 ] 初心者なので日本語わかりません。
614 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:53:40 ] それではboost.functionの説明を始めようか
615 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:10:08 ] がんばってコード書いたのによくよく調べるとSTLとかBoostに同じしかも完全に上位のコードとかがあると泣けるんだがしかし
616 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:17:11 ] 頑張る前に調べような。そういうのが使える環境ならなおさらだ。
617 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:45:28 ] そりゃ一回は調べるんだけど見逃してたりするんでさ
618 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:49:27 ] コードを書いたことが明日への礎になる。
619 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:57:45 ] 中で何やってるのか全く理解できないようなコードを使ってトラブルと どうにもならなくなるしな。
620 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:13:41 ] >>615 それはいい勉強をしたと思え。 ただライブラリを使ってるだけよりいい経験を積んだんだ。
621 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:27:56 ] ・boostを眺める ・欲しい機能を見つける ・使ってみる ・boostを参照せずに同じ様な機能の縮小版を作ってみる ・挫折する ・boostはどうやってるんだろうと思いながらソースや解説をみて学ぶ 俺は大体こんなかんじで勉強になった functionとか
622 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:23:13 ] 連結リストを実装するのはCでよくある勉強だし、ポインタ完全制覇とか読むと実装したくなるしな。 それをSTLで既にあるじゃんとか言って馬鹿にする奴はいないだろ。
623 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:25:27 ] そりゃまぁ勉強目的でやるんならね
624 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:32:21 ] 時には馬鹿にならないとやる気にならないこともある。 Boostにあるからいいかではなかなか重い腰が上がらない。
625 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:37:36 ] namespaceでもprivateとかpublic使えればいいのに
626 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:50:49 ] anonymous namespaceが近いんじゃない?
627 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:57:13 ] >>625 staticメンバ関数で、それ専用のクラスを作るのはどうだろう。 気分的にちょっとアレだけど
628 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:05:07 ] 無名名前空間とはちょっとちがうかなぁ namespace hoge { private: template <int n> struct is_even { static const bool value = n % 2 == 0; }; // インクルードしても外から使えないようにしたい public: template <int n> class fuga { static const int value = is_even<n>::value ? n : 0; 〜〜; }; } みたいな感じで使いたい 仕方ないからnamespaceをclassかstructで置き換えてそれっぽいことはできてるんだけど 今度はusing namespaceが使えない・・・
629 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:30:43 ] ・規約でBoostを禁止しているプロジェクトにげんなりする。
630 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 01:46:06 ] >>628 namespaceだと名前空間を汚す気があれば突破されてしまうが。
631 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 04:51:45 ] 静的関数のテンプレート関数版みたいなもんか。 クラステンプレートfugaの静的メンバ関数にはしたくなさそうだな。