[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 01/02 08:13 / Filesize : 163 KB / Number-of Response : 632
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.68【環境依存OK】



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でのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か   に置換しておくことをお勧めします。

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の静的メンバ関数にはしたくなさそうだな。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<163KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef