【初心者歓迎】C/C++室 Ver.68【環境依存OK】at TECH
【初心者歓迎】C/C++室 Ver.68【環境依存OK】 - 暇つぶし2ch409:デフォルトの名無しさん
09/10/05 23:38:40
>>405
フォーマットがわかったくらいじゃ再生できなくて
結局規格書が必要になるから最初から規格書手に入れたほうがよい

つーか何人もの熟練のプログラマが関わってても
バグが出るのが動画の世界なのに
そんなことも自分で解決できないレベルじゃ間違いなく挫折する
いや、むしろ俺が挫折した

悪いことは言わないからDirectShowにでも頼ったほうが早い

410:デフォルトの名無しさん
09/10/06 00:03:01
>>405
高い山を目指すのも悪くはないけど山の高さを知るためにもまずは
JPGあたりからはじめたらどうかな?
挫折すること請け合い

411:デフォルトの名無しさん
09/10/06 00:29:26
jpgですら難しいのに動画とか無理だろそもそもソフトウェアエンコードでまともな速度でるのか初心者はBMPから始めろ

412:デフォルトの名無しさん
09/10/06 01:36:50
そういえば

漫画とかイラストとか、基本は白黒で線とベタとトーン、それに活字で出来ている絵、
これって、一般的にはBMPからJPGに圧縮してるけど
線や字(フォントの種類)等を判別する方法をうまく考え出せば
JPGとかに比べて、ずっと圧縮率を高くすることも出来ると思うんだ。

もう既に作られているのかもしれないけど。

413:デフォルトの名無しさん
09/10/06 01:45:16
自動ベジェ曲線化とか? 難しそうだ。OCRは何とかなるか。

414:デフォルトの名無しさん
09/10/06 01:49:07
グレイスケールで十分じゃね?

415:デフォルトの名無しさん
09/10/06 01:52:58
イラストレータとかのベクターフォーマットがそんな感じじゃね?
でも、線の強弱やかすれ、ベタフラッシュやホワイト、トーン削りなんかを考えたら、
jpgとかで十分だと思うよ。

416:デフォルトの名無しさん
09/10/06 01:56:21
potraceでぐぐれ

417:デフォルトの名無しさん
09/10/06 02:07:11
強弱・かすれ・トーン削りみたいなのをきれいに残したいなら
むしろ8bitグレースケールにしてPNGだろうな
サイズは増えるだろうけど「無劣化」はでかい

ちなみにJPEGにもグレースケール専用の色空間定義がある
読み書きできないソフトも多いだろうけど

418:デフォルトの名無しさん
09/10/06 06:47:55
最小化された(子)ウィンドウのサイズをMoveWindowで変更し、
そのウィンドウを標準化すると、指定サイズに変わっている
というのをやりたいのですが、サイズが変わってくれません。
いい方法がありましたら教えてください。

419:デフォルトの名無しさん
09/10/06 15:21:59
>>418
SetWindowPlacement

420:デフォルトの名無しさん
09/10/06 21:23:35
URLリンク(www.geocities.jp)
のページの
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);
について質問ですが、これはLRESULTという型のCALLBACK WndProcという関数でしょうか?
それともLRESULT CALLBACKという型のWndProcという関数でしょうか?それともまた別でしょうか?
前者のような気がするんですが、いじってみてもうまくコンパイルできません。
たぶん自分のレベルでは追いつかないような記述だと思うのですが、分からないままだと悲しいので答えだけ教えてください

421:デフォルトの名無しさん
09/10/06 21:26:26
LRESULT => 返り値
CALLBACK => 呼び出し規約
WndProc => 関数の名前

422:デフォルトの名無しさん
09/10/06 21:28:49
>>421
呼び出し規約というのは初耳です。調べてみます。
ありがとうございました~

423:デフォルトの名無しさん
09/10/06 22:39:17
>>419
ありがとうございます。

424:デフォルトの名無しさん
09/10/06 23:18:53
呼び出し規約って何者なの?

425:デフォルトの名無しさん
09/10/06 23:24:38
wikipediaのページの左上にある画像に「ワィ」ってあるけど、本当は「ウィキペディア」の「ウィ」のつもりの誤字なんだってね。

426:デフォルトの名無しさん
09/10/06 23:45:55
>>424
関数呼び出すための約束事。
アセンブリになったときのお約束で、他言語との協調とかそういうときに役に立つ。

427:デフォルトの名無しさん
09/10/06 23:56:12
質問です。
kern protection failureってどういうエラーなのでしょうか?

たとえば
char *str = "aiueo\0";
で初期化した文字列に対して
*str = 'o';
を実行したときにこのエラーが出てしまいます。
使用OSはMAC OS Xでgccを用いてコンパイルしています。

428:デフォルトの名無しさん
09/10/06 23:59:00
多分、書き込み禁止領域に書き込んだから怒られてる。
それは配列として確保してないから改変不可だ。

429:427
09/10/07 00:13:26
>>428
説明ありがとうございました!
宣言だけ行って、mallocで領域を確保したらうまくいきました
追加で質問させていただきたいのですが、
宣言直後のポインタは基本的に書き込み禁止領域のアドレスを指しているのですか?

430:デフォルトの名無しさん
09/10/07 00:17:21
そりゃヌルポといってだな
どこさしてるかわからん超危険ポインタ
下手したらOSの挙動に割り込んでHDDをぶっ壊すかもしれない

ってたまに聞くけど本当かどうかはしらない。使ってみてはどうでしょうか

431:デフォルトの名無しさん
09/10/07 00:24:22
int a[1];
a = malloc(x);

これって別に問題はおこらなそうだけどやったらだめなの?

432:デフォルトの名無しさん
09/10/07 00:29:49
やってもいいけどコンパイラに怒られる


433:デフォルトの名無しさん
09/10/07 00:37:49
>>429
初期化されてない自動変数のポインタは、大体の処理系ではスタックのメモリに
残っていた値が入っていて、元がint型の値だったりしたとき、全く関係のない
アドレスが入っていたりする。たまに書き込み可の領域を指してることもあることは
あるが、大体は書き込んだらSegmentation faultで落ちる。

434:デフォルトの名無しさん
09/10/07 00:38:36
むかーし、俺も初心者だった頃、同じようなことをしようとして出来なくて悩んだな。
今にして思えば、単に配列とポインタを理解してなかっただけだが。

435:デフォルトの名無しさん
09/10/07 00:50:33
>>430
モダンなOSなら、ちゃんと例外を投げてくれるけどね。

436:デフォルトの名無しさん
09/10/07 01:19:28
ちなみにヌルポをfreeしたりdeleteしたりするのは合法

437:デフォルトの名無しさん
09/10/07 01:21:30
切り替え機のPS2ポートにキーボードをつながないで
もう一台のlinuxPCのRS232Cのポートから変換コネクタを
かませて切り替え機につなぐことは出来ますか?

切り替え機に大して送るキーボード信号をソフト的に
エミュレーションしたいので可能かどうか悩んでます。

linuxスレで聞こうかと思いましたが、閑散としていたので
こちらで聞きました。
アドバイスがあればよろしくお願いいたします。

438:デフォルトの名無しさん
09/10/07 01:24:44
■実現したい事柄
TabControlで、タブの入れ替えをドラッグアンドドロップで行いたい。

■備考
下記URLはC#でのソースです。
URLリンク(watcher.moe-nifty.com)

備考欄のURLの内容をC++で実現してあるソースはありませんか?

439:デフォルトの名無しさん
09/10/07 01:29:40
>>430
それヌルポじゃないよ
ヌルポはヌルポであって、未定義とは全く違うよ

440:デフォルトの名無しさん
09/10/07 01:38:05
Cのポインタは未初期化でも何かしら指しているものな。

441:デフォルトの名無しさん
09/10/07 01:41:28
>>430

実アドレス上で動かないからOSには多分被害ないと思うが。。。


442:デフォルトの名無しさん
09/10/07 01:49:05
>>424
関数の呼び出し方をアセンブリ言語レベルで規定したもの。
引数はスタックに積むのかレジスタに格納するのか、スタックに積むなら順番はどうか、
レジスタを使うならどのレジスタにするのか、とか諸々のルールがある。
呼び出し規約の指定を間違えると、関数を正しく呼び出せず、クラッシュする。
アセンブリ言語で関数を書くのでなければ、中身は知らなくても名称さえ知っていれば大丈夫。

443:デフォルトの名無しさん
09/10/07 02:34:07
C++勉強中のものです。

数メガサイズのファイルを読み込み、そのデータをメモリ内にアプリケーションが
終了するまで持ち続けるようなプログラムを作成したいのですが、読み込んだデータを持つ方法で悩んでいます。

複数のクラスからアクセスするようなデータ場合、usingを使いグローバル変数に格納するのが一般的なのでしょうか?
なんとなく、C++ではグローバル変数を使用するのがタブーになっているような思いがあるので質問させていただきました。

444:デフォルトの名無しさん
09/10/07 03:15:20
グローバルにするのは一般的じゃないので普通に持ち回ればいいと思う。
持ち回り方はC++だからといって何か特殊な方法でもないよ

445:デフォルトの名無しさん
09/10/07 03:28:48
>>443
そこでMediatorパターンですよ。

446:デフォルトの名無しさん
09/10/07 04:20:08
>>440 初心者スレで嘘つくなよ。

447:デフォルトの名無しさん
09/10/07 04:29:49
どこか分からないが、どこかを指しているというのを言ってるんじゃ

448:デフォルトの名無しさん
09/10/07 04:38:06
linuxのjfbterm上で動くコンソールアプリをC(gcc)で作ってるんだが
ncursesのboxのボーダーが文字化け(?)してる。 なんか技がある?
スレ違いだったら誘導してくれ。

449:デフォルトの名無しさん
09/10/07 04:46:06
>>447
指していない可能性だってあるんだぜ。ぬるぽとか。

450:デフォルトの名無しさん
09/10/07 04:51:11
へぇ。じゃあ、0番地を指すポインタは作れないのか

451:デフォルトの名無しさん
09/10/07 04:52:39
>>448
どう化けてんだ?
\が¥になるのはフォントのせいだけど。

452:デフォルトの名無しさん
09/10/07 05:00:01
>>451
多分、フォントのマッピングが違ってて、それで文字化けしてるんだろうけど
box (subwin_1, ACS_VLINE, ACS_HLINE) でサブウィンドウを囲ってやろうと
すると、縦の線が上付きの「3」になって、横の線はなにも表示されない。
なんかいいアイデアない?

453:デフォルトの名無しさん
09/10/07 05:08:12
ヌルポと同じビットパターンの番地を指すポインタは当然作れないよ(作らなくても
いいようになってるし)
どんなビットパターンかは処理系依存で、0に等しいとは限らないけど、コンパイル
タイムでポインタにキャストされた0はヌルポ扱いをすることになってる
まぁこの辺はいまいち分かりにくい仕様だと思うし、C++0xではnullptr_t型のnullptr
というものがとうとう導入されることになった訳だけど

454:デフォルトの名無しさん
09/10/07 05:11:28
URLリンク(www.kouno.jp)
ぬるぽの知識が曖昧な奴はこれ嫁

455:デフォルトの名無しさん
09/10/07 05:30:55
>>452
localeを見直してみるとか?

456:デフォルトの名無しさん
09/10/07 05:33:43
つまり自動変数として生成したポインタの初期化を行わなかった場合に、
それがたまたまヌルポになる可能性があるから、未初期化でも
常にどこかを指すというのは間違いであると

457:デフォルトの名無しさん
09/10/07 06:24:43
Win32だと0x7fff以下がぬるぽってことになるんだな。

458:デフォルトの名無しさん
09/10/07 09:17:26
>>443
シングルトンでも使えばいいじゃない

459:デフォルトの名無しさん
09/10/07 10:39:06
Listなどに代表されるコレクション?について教えてください。
自分で書いたクラスをインスタンス化し、それをListとして格納して扱うにはどうすれば良いのでしょうか?
まぬけな質問に見えますが、非常に困ってます。

C#で書いた場合、こんな感じになります。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

C++で書くにはどうすれば良いのでしょうか?

460:デフォルトの名無しさん
09/10/07 10:49:59
>>458
グローバル変数はダメなのに「シングルトン」ならダメじゃなくなるとでも思ってるのか?

461:デフォルトの名無しさん
09/10/07 10:50:41
>>459 std::list<...>

462:デフォルトの名無しさん
09/10/07 13:05:20
>>460
まったく別なんじゃないか?

463:デフォルトの名無しさん
09/10/07 13:22:52
>>460
なんでグローバル変数がだめだとシングルトンもだめになるって思ったの?

464:デフォルトの名無しさん
09/10/07 13:33:49
>>462-463
まだこんなこと言う人がいるんだな。初心者スレだからしょうがないか。

URLリンク(ja.wikipedia.org)
> グローバル変数は、通常その非局在性によりはっきりと悪しき慣習と考えられている。

ここで挙げられているような非局所性とそれによる問題点はグローバル変数でも
シングルトンでも同じこと。


また、それを許容するとしても、ふつうにグローバル変数やフリー関数が使える
(クラスが不要な) C/C++ ではわざわざシングルトンパターンと呼ばれるような
まわりくどい構造を持ち出す意味が無い。

URLリンク(www.google.co.jp)

465:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/07 14:47:26
>>464
初期化順の制御とかしたくなることない?

467:デフォルトの名無しさん
09/10/07 15:52:01
シングルトンとかグローバル変数を使うと、周りを癒着しちゃってモジュール化するとき弊害になるんだよな。
グローバル変数とか使うなら、一個のクラスのメンバ変数にしてモジュールにしてしまうほうが再利用性を確保できる。

468:デフォルトの名無しさん
09/10/07 16:33:49
コマンドラインで引数を受け取ってローカルアプリのAPIをコールするexeを
作成したいんですがどこか参考になるサイトご教授願いませんか?
オブジェクト指向は理解してますがwindowsのプログラムは超初心者です。

469:デフォルトの名無しさん
09/10/07 16:43:18
Windowsのプログラムが超初心者なら、どのOSのプログラムなら初心者じゃないんでしょうか。

470:デフォルトの名無しさん
09/10/07 16:48:48
>>468
私はあなたではないので質問の意味が分かりません
他の人にわかるように書いてください

471:デフォルトの名無しさん
09/10/07 16:50:45
>>468
ローカルアプリというのは何を指していますか?
APIは何万個もあるわけですが、どのAPIをコールしたいのですか?
コマンドラインで受け取った引数は何に使うのですか?

472:デフォルトの名無しさん
09/10/07 17:05:31
>>471
Skypeで特定ユーザーにメッセージを送信、ムードメッセージを送信、オンライン、オフラインの切り替えなどです。
Firefoxのadd-onを作成しているのですがActiveXのSkype4COM.dllが使用できないため
exeでなんとか操作できないかと。

473:デフォルトの名無しさん
09/10/07 17:11:02
>>472
exeじゃなくてwscriptで十分。
Skype4Com WScript でググレ。

474:デフォルトの名無しさん
09/10/07 17:12:56
>>472
URLリンク(developer.skype.com)
ここの referenceguide とか examples ちらっと見る限り exe での操作はできるよ

475:デフォルトの名無しさん
09/10/07 17:21:43
>>464
wikipediaってwww

476:デフォルトの名無しさん
09/10/07 17:33:14
>>468
その書き方だと、既成のEXE内の関数をコールしたいとか、あらゆる可能性を引きずってる。
もうちょっと限定してくれ。

477:デフォルトの名無しさん
09/10/07 17:41:39
プログラム全体から呼び出される可能性のあるものはシングルトンにしてもいいだろうよ。

478:デフォルトの名無しさん
09/10/07 17:42:26
>>476
>>468 = >>472 みたいだ

479:デフォルトの名無しさん
09/10/07 17:56:05
グローバルかシングルトン使わないと延々とポインタを引数にリレーとかしないといけないからめんどくさいじゃん

480:デフォルトの名無しさん
09/10/07 17:57:59
ぶっちゃけシングルトンにしていいようなものはグローバル変数にしていいと思う
gotoと同じく完全排除が常に善ではないし、gotoよりは使ってもいい
ただ無闇に使うなってだけ

481:デフォルトの名無しさん
09/10/07 18:02:08
>>478
おっとすまない。俺が読めてなかったみたいだ。

482:デフォルトの名無しさん
09/10/07 18:04:37
グローバルとシングルトンは全然違うだろ。
シングルトンはグローバルとファイル内にスコープの閉じたstaticグローバル変数の中間くらいの性質をもったものでグローバルより安全で使いたい場所でだけゲットできる

483:デフォルトの名無しさん
09/10/07 18:05:13
唯一のインスタンスにアクセスするメソッドだけを持ったクラスを継承させたほうがいいとおもう

484:デフォルトの名無しさん
09/10/07 19:04:33
>>475
内容がおかしければ直せばよい。それだけだ。

485:デフォルトの名無しさん
09/10/07 20:00:06
シングルトンなんか最近はアンチパターン扱いだろ

486:デフォルトの名無しさん
09/10/07 20:06:29
>>484
便所の落書きを一生懸命書き直すバカなんかいないだろ

487:デフォルトの名無しさん
09/10/07 20:09:50
できない言い訳はいいよ

488:デフォルトの名無しさん
09/10/07 20:20:45
ランタイムコストが掛かるし、細かい罠がぼろぼろ落ちてるし、マルチスレッドには
致命的に向いてないし、下手な使い方をすればグローバルインスタンスと全く同様の
問題も抱える。
今時シングルトンなんか推奨する人はちゃんと理解してるんだろうかと。

489:デフォルトの名無しさん
09/10/07 20:27:54
論拠にwikipediaをもってくるやつってなんなんだ。
書き直せよって言うけど、俺がぜんぜん違う内容に書き換えたら、それを信じるってことか?

490:デフォルトの名無しさん
09/10/07 20:28:02
シングルトンは「俺のコードカコイイ」な人かJava脳の人が使うもんだろ
で、MTのコードを書き始めると、ダブルロッキングとか馬鹿で無意味なこと始めるか、
目が覚めて窓から放り投げる

491:デフォルトの名無しさん
09/10/07 20:29:41
うぃきぺを補強に持ってくるのはバカだけど、とりあえずうぃきぺ出典かどうか
なんか無視して、中身の正しさを巡って議論すればいいと思うよ

492:デフォルトの名無しさん
09/10/07 20:31:50
海外のフォーラムなんかも「シングルトンだって? 素直にグローバル使えよプゲラ」って感じだな

493:デフォルトの名無しさん
09/10/07 20:32:57
値域の制限には使えると思う

494:デフォルトの名無しさん
09/10/07 20:46:55
wikipediaだからという理由で中身を見ない人って何なの?

495:デフォルトの名無しさん
09/10/07 20:59:59
>>489
だからグダグダと言い訳ならべなくていいって。
君の最大の力をもって素晴らしいページに書き換えてくれ。

496:デフォルトの名無しさん
09/10/07 21:12:45
意味がわからない。
wikip好きすぎだろ。



497:デフォルトの名無しさん
09/10/07 23:02:01
お前の2行目の決め付けのほうが意味がわからない。
発狂するタイミングじゃないと思うんだけど。

498:デフォルトの名無しさん
09/10/08 01:33:41
>>466
>>482
「初期化順の制御」したいときにも「使いたい場所でだけゲット」したいときにも、
クラスに対してシングルトンパターンのような加工を施す必要は無いんじゃない?

ふつうのクラス定義と、そいつの参照を返す関数がひとつあるだけじゃダメなの?

499:デフォルトの名無しさん
09/10/08 02:24:17
>>498
初期化順で俺が言いたかったのは複数のグローバルなオブジェクトがあるときね
1個だけならお好きに


500:デフォルトの名無しさん
09/10/08 02:54:52
>>499
オブジェクトが何個でも一緒じゃない?

ふつうの関数(と静的変数)ではできなくて、「シングルトン」ならできる、っていう
初期化順の制御ってどんなのがあるの?

501:デフォルトの名無しさん
09/10/08 02:59:45
>>498
>ふつうのクラス定義と、そいつの参照を返す関数がひとつあるだけじゃダメなの?
クラスを公開するなら、そのクラスのインスタンスがあちこちにできちゃうかもしれない。
メンバ関数じゃなくて、参照を引数に取る関数を定義すればいいかもだけど、
それならいっそ参照を外に出さないで、関数だけ公開すればいいと思う。

個人的には静的メンバ関数のみを持つクラスをよく使うなあ。
こういうのってパターン名とかないのかな。

502:デフォルトの名無しさん
09/10/08 03:09:59
>>501
> クラスを公開するなら、そのクラスのインスタンスがあちこちにできちゃうかもしれない。
それが嫌なら、公開するクラスは純粋仮想関数の宣言を並べただけの
インターフェースクラスにしとくという手がある。

class C {
public:
 virtual void f() = 0;
 virtual void g() = 0;
};

C& DefaultC();

「参照返す関数」をなるべく使わないように、できるだけ引数で受け渡すように
しとけば、テスト用にダミー実装に差し替えるとかいうようなこともできる。

> それならいっそ参照を外に出さないで、関数だけ公開すればいいと思う。
あぁそういうパターンもあるよね。 C だと超ふつうだな。


やっぱりシングルトンパターンのメリットは見えてこないな。

503:デフォルトの名無しさん
09/10/08 09:31:26
staticなメンバ変数しか持たないのはmonostateパターンだね
見た目がシングルトンより綺麗だから俺もこっち使うけどメリットデメリットはよくわからん・・・


504:デフォルトの名無しさん
09/10/08 10:18:34
継承できるできないとかコンストラクタが呼ばれない呼ばれるの差じゃね

505:デフォルトの名無しさん
09/10/08 10:56:21
質問です。

32ビットのXPで、出来るだけ最適化をかけられてフレームポインタが無い .exe は、
原則として関数(インライン化されたものを除く)のコール順というのは分からないんですよね?

それなのに、VisualStudioとかで見ると、呼び出し履歴が見えるのはどうしてでしょうか。

506:デフォルトの名無しさん
09/10/08 11:11:59
>>505
最低限、関数からリターンするためには呼び出された元の位置を知っていないといけない
わけで、どんなに最適化してもプログラムが実行可能である限りその情報は存在している。

CPU が関数からリターンするときにそういった情報を使うのと同じように VisualStudio などの
ソフトで情報を読み取れば、最低限の呼び出し履歴の表示は可能。

さらにバイナリに残っているシンボル情報やコンパイル時に生成できるデバッグ情報などを
加えれば、関数名や引数の表示までだいたい可能になる。

507:505
09/10/08 11:28:37
>>506

ありがとうございます。

StackWalk (StackWalk64) 関数でスタックトレースしようとしても、
フレーム有りだと上手くいくのですが、無しだと上手くいきません。

URLリンク(msdn.microsoft.com)

の引数 FunctionTableAccessRoutine のところに、x86 だと fpo にアクセスすると
明記されてるので、上手くいかなくて当然なのかもしれないんですが、
なんとかアクセスできるようにする方法は無いでしょうか?

508:デフォルトの名無しさん
09/10/08 11:38:15
>>507
「上手くいきません」って言われてもな。

問題を再現するためのコードと期待した結果と実際の結果を用意して Windows API スレへどうぞ。
Win32API質問箱 Build82
スレリンク(tech板)

509:505
09/10/08 11:53:55
>>508
ありがとうございます、こっちで聞いてみます。

510:472
09/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:デフォルトの名無しさん
09/10/08 18:17:42
Mac OS XとLinuxとFreeBSDでは
OpenGLのヘッダやライブラリのファイルのある場所が違うので
これらのどこになってもmakeが一発で通るように
Makefileを書きたいのですが
どういう風に書けばよいのでしょうか?

512:デフォルトの名無しさん
09/10/08 18:19:33
>>511
makefile を分ける
ライブラリパスを追加しまくる
configure を書く

513:デフォルトの名無しさん
09/10/08 18:33:47
はじめまして。
いきなりですが質問をさせてください。

携帯向けの会員サイトを構築したいので、いくつかの携帯サイトを参考にしてよさそうなのを見つけたのですが、
どこで配布されているものなのかわkりません。
またはシェアウェアや、どこかの会社に委託して構築されてるものなのでしょうか。
URLリンク(www.google.co.jp)

これらはすべて同じシステムのようなのですが、配布元を教えていただけないでしょうか。
よろしくお願いします。

514:デフォルトの名無しさん
09/10/08 18:39:07
>>513
鼬害。

515:デフォルトの名無しさん
09/10/08 18:41:18
>>511
automakeあたりを使えば良いんじゃね?

516:デフォルトの名無しさん
09/10/08 20:05:50
Linuxのgcc4.3.3では
#include <limits>
でコンパイルエラー起こした
#include <climits>
を代わりにインクルードさせた通したんだけど
いいんでしょうかね、これで

517:デフォルトの名無しさん
09/10/08 20:09:39
>>516
C++ ならおk
C言語ならNG

518:510
09/10/08 20:46:10
自己解決。
UnicodeにShift-jis渡してりゃ化けるわw
あほだ俺w

519:デフォルトの名無しさん
09/10/08 21:10:11
どのUnicode

520:デフォルトの名無しさん
09/10/08 21:17:51
>>516
Cではふつう #include <limits.h> と書く。


521:デフォルトの名無しさん
09/10/08 23:06:54
環境変数はグローバル変数だから使用禁止

522:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/08 23:20:31
\という文字がほしいなら\をエスケープして\\と書く。

524:デフォルトの名無しさん
09/10/08 23:35:59
すみません、それはつまり
プログラムを実行する人に向けて、\は\\と書いてください、と
マニュアルに書くしかないということでしょうか?


525:デフォルトの名無しさん
09/10/08 23:41:17
質問の趣旨とは異なる回答だけど、
プログラム内部でディレクトリパスの末尾に¥が付いてる必要があるなら
入力時には¥の有り無しどちらでも受け付けるようにしておいて
プログラム側で末尾を判定して¥を付加してやればいいね

\"が"になってしまうのは使う側の責任。だけどそもそも末尾に¥を要求しなければ
そういうミスの発生件数も少なくなる

526:デフォルトの名無しさん
09/10/08 23:43:45
>>524
それはコマンドプロンプトのせいだからどうしようもないね
対策はダブルクォートが出てきたら \" だと解釈して自分でパースするくらいかな

527:デフォルトの名無しさん
09/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
09/10/09 00:31:59
すみません、自己解決しました。
vector<int>::iterator imax = lower_bound(v.begin(), v.end(), max + 1);
でいいですね。

529:デフォルトの名無しさん
09/10/09 00:42:20
>>525
プログラム内部では、末尾に¥を付ける必要特にないのですが
やはりユーザー側から「¥”」のような指定をされてしまうと
プログラム側では防ぐことはできなさそうです。

>>526
文字列に「”」があったら、パースするというのも考えたのですが
パース後に残った文字列のどこからどこまでが第二引数、第三引数かの判定が難しいです。
(実は第三引数まであり、それぞれ半角スペースが入る可能性有り。)

もう少しやってみますが、
おそらくマニュアルに記載するのが良さそうに思います。

ご回答ありがとうございました。


530:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/09 06:54:56
>>527
max+1するなら、両方lower_bound()だな。
iminをupper_bound()で得ると、重複した値を取りこぼす。

532:デフォルトの名無しさん
09/10/09 09:38:15
>>526
つ[ディレクトリ記号は/でおながいします]

533:デフォルトの名無しさん
09/10/09 10:16:01
>>490
Javaはシングルトンの使い道があるん?


534:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/09 17:34:33
>>534
ここ行って聞け

C++/CLI part3
スレリンク(tech板)

536:デフォルトの名無しさん
09/10/09 17:37:16
>>535
ありがとうございます。

537:デフォルトの名無しさん
09/10/09 17:40:20
>>534
エラーもしくは警告にならないのそれ

まぁそれは実質的に
void test(int *x)
というプロトタイプと解釈されるから

538:デフォルトの名無しさん
09/10/09 17:59:43
>>537
エラーも警告もでません。
これは普通はやらない書き方なんですね。

だいたい理解できました。
test関数内ではポインタx単体の大きさをsizeofで見ていて、main関数内では配列全体をsizeof見ていると。

ということはこの場合、test関数内で20という値を得る処理を書く事はできないのでしょうか?

539:デフォルトの名無しさん
09/10/09 18:06:48
C本来の配列は要素数の情報を持っていない。なので、Cで配列を引数に取る関数は
たいてい別の引数で要素数を受け取るようになっている。
悪いことは言わないから、array<T>なりList<T>を使っとけ。

540:デフォルトの名無しさん
09/10/09 18:10:48
もう誘導先に行ってて遅いかもしれないが、
C++かC#のどちらか明確にして勉強したほうがよいと思うよ。


541:デフォルトの名無しさん
09/10/09 18:12:46
>>539
そうゆうものなんですね。
すっきりしました、ありがとうございます。

素直にコンテナ?を使っておきます。

542:デフォルトの名無しさん
09/10/09 18:18:39
>>540
もともとJavaを主に使っていて、C#は多少勉強した程度です。
Javaとは配列の性質が違っていたのでとまどいました。
ご忠告ありがとうございました。

543:デフォルトの名無しさん
09/10/09 18:28:39
gccのバージョンを数字だけ出力する方法はあるでしょうか?
4.3.5なら「4.3.5」だけとか

544:デフォルトの名無しさん
09/10/09 18:51:35
___GNUC___ ___GNUC_MINOR___ だけでは末尾の1桁が
取れないのか

どうやればいいんだろう

545:デフォルトの名無しさん
09/10/09 19:12:00
__GNUC_PATCHLEVEL__

546:デフォルトの名無しさん
09/10/09 21:04:03
>>545
おおサンクス

そしたらこうすればいいのか

printf("%d.%d.%d", ___GNUC___, ___GNUC_MINOR___, __GNUC_PATCHLEVEL__);

547:デフォルトの名無しさん
09/10/09 21:48:40
質問です。

環境はVisual Studio.net 2003 C++

条件は列(9)の最後尾が○の場合、
後ろから●が見つかるまでの部分を
削除して表示する

***実行前***
○●●○○●●○○
○●●○○●●

↓↓↓↓↓↓↓

***実行結果***
○●●○○●●
○●●


●○○●○○○○○
●○○○○○●○
○●●○

↓↓↓↓↓↓↓

●○○●
●○○○○○●
○●●




548:デフォルトの名無しさん
09/10/09 21:49:38
最大横9×縦11項目
●○○●○○○○○
●○○○○○●○○
●○○●○○○○○
●○○○○○●○○
●○○●○○○○○  
●○○○○○●○○
●○○●○○○○○
●○○○○○●○○
●○○●○○○○○
●○○○○○●○○
●○○○○○●○○

↓↓↓↓↓↓↓

●○○●
●○○○○○●
●○○●
●○○○○○●
●○○●
●○○○○○●
●○○●
●○○○○○●
●○○●
●○○○○○●
●○○○○○●

このような感じで出力したい場合、どういった風に
実装すればいいでしょうか?

以上、よろしくお願いします。

549:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/09 22:03:14
MFC使っていいなら、

CStringW s = L"○○●●○○";
s.TrimRight(L'○');


551:デフォルトの名無しさん
09/10/09 22:28:16
***実行前***
○●●○○●●

↓↓↓↓↓↓↓

***実行結果***
○●●

ここがわからん。開始時に末尾が●ならそれは削除?

552:デフォルトの名無しさん
09/10/09 22:37:51
2パスにするのが楽かな??
まず、左から右に一回配列を舐めて、最後に出てきた黒の場所思えておいて、2パス目で表示。
もちろん処理を多めに食うけど、確実じゃないかなぁ。

553:デフォルトの名無しさん
09/10/09 22:43:40
>>549
サンクス!!

>>550
サンクス!!

>>551
すまん、記述ミス

***実行前***
○●●○○●●○○
○●●○○●●

↓↓↓↓↓↓↓

***実行結果***
○●●○○●●
○●●○○●●





554:デフォルトの名無しさん
09/10/09 22:44:15
>>553
ん、そっか。ミスか。
じゃあ回答でおk

555:デフォルトの名無しさん
09/10/09 22:51:09
>>552
例えば、
for(int i=0; i<99;i++)
{
bool iMap[99] = getFunc( i );
}
これで○=1,●=0

ってなっていた場合どうする?

つまり、○ならオブジェクトが取得できていて、
●なら何も無い状態。





556:デフォルトの名無しさん
09/10/09 22:54:20
>>555
それぐらいは自分で考えてくれ。

557:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/09 23:09:14
多分9*11で99要素なんだよ。
だから2重ループにするか、lastblackを11要素の配列にしないとだめだ

559:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/09 23:40:27
だれも素直なstrrchrとかは勧めないのか
Unicodeだとしてもwcsrchrとかあったはずだし
最悪strrchrwがshlapi.hとかにあった気がするが

561:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/10 00:27:48
>>562
Hoge c; って書いた時点でパラメータなしのコンストラクタで初期化さ
れてるんでは。



564:デフォルトの名無しさん
09/10/10 00:30:36
>>562 おそらく無理
前者のcはコンストラクタが呼ばれるから初期化されているので警告は出ない。
後者のオブジェクトを作るだけという使い方も十分あるし文法上何の問題もない。

どうしてもというなら、フラグを作って何のメンバ関数も呼ばれずにデストラクタが呼ばれた場合はassertするくらいか。


565:デフォルトの名無しさん
09/10/10 00:37:36
>>563-564
あー、なるほど
Hogeにはコンストラクタを書いていませんが、暗黙のコンストラクタが用意されるんでしたね…

Hogeはコンストラクタのいらない型なのですが、そこでなんとかできないでしょうか?
例えるならVectorデータ型みたいなもので
struct Hoge
{
float x, y, z;
};
相当の品なのです。
こういう構造体を「コンストラクタを無くし」て、「初期化されなかったときの利用で、警告が出るようにする」ためのオプションや修飾子はないでしょうか?


566:デフォルトの名無しさん
09/10/10 00:56:10
>>565
Hoge C=式 ?Hoge(0):Hoge(1);


567:デフォルトの名無しさん
09/10/10 01:01:18
デフォルトコンストラクタをprivateにして必ず565みたいにさせるとか。

568:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/10 02:24:28
変数宣言と初期化を別にする限り防げないように思う

つまり
>>567のいうとおりデフォルトコンストラクタをprivateにして
>>566のいうような宣言と同時に初期化を必須にするしかないと思う

ただ>>566はコンパイラが馬鹿だとコピーコンストラクタが使用されそうだし
俺なら
Hoge C(式 ? 0 : 1);
って書きそう

570:デフォルトの名無しさん
09/10/10 02:29:22
>>568
Vectorみたいな使い方と考えると
比較的プリミティブに近くて多く使われそうだし
毎回ヒープにアクセスさせるのは大仰な上に遅くなりそうじゃね?
マルチスレッドだったりしたら毎回排他制御が…

571:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/10 09:36:35
>>566-570
真剣な検討ありがとうございます。

ポインタにするのは、ちょっと速度的にきつそうかなと思います。
570さんのおっしゃるとおり、プリミティブに近いものを想定していますので。

デフォルトコンストラクタをprivateにすると、
Hoge c;
とはできませんね。

(その方法で初期化を強要しつつ)初期化で条件式を使うのは確かによさそうですが、条件分岐が3つ以上の場合に無理がありそうですね。
書けなくはないですが・・・。

else Hoge(1);
のところで、「生成したクラスが使われていないようですが?」という警告があれば一番良いのですけどね…。
それを避けるためには、使ってないローカル変数への警告を抑える
(void)a;
と同じように、
(void)Hoge(1);
と書く。とか…。

573:デフォルトの名無しさん
09/10/10 09:38:34
>>571
int ArraySize(X* object)
ここで、単なるポインタにしてしまった以上 sizeof(object)では大きさがとれませんよ。
sizeof(配列)で大きさが正しくとれるのは、それが配列宣言されており、コンパイラがサイズを知っているからです。
ポインタと配列は似て非なるもの

574:デフォルトの名無しさん
09/10/10 09:43:32
template <class T, size_t N>
size_t GetArraySize(T (&)[N])
{
return N;
}

int array[] = {・・・};
cout << GetArraySize(array);

575:デフォルトの名無しさん
09/10/10 10:06:36
>>571 です
>>573
>>574
ありがとうございます。
>ポインタと配列は似て非なるもの
そうですね、短絡的でした。
>>574
T (&)[N]
この書き方ですが、配列の宣言が、foo[N]このような書き方がしてある配列を参照しているという、ことなのでしょうか?
それから、
return N;
どうしてこれで要素数が取得できてしまうのでしょうか、不思議です?

576:デフォルトの名無しさん
09/10/10 10:09:41
>>575 です
質問がまわりくどいですね
T (&)[N] と T &[N]
この違いを教えて頂けないでしょうか。

577:デフォルトの名無しさん
09/10/10 10:10:13
foo[N]のNこそ、要素数でしょ?w

578:デフォルトの名無しさん
09/10/10 10:13:42
>>577
あ、そうか!
わかりましたw
T (&)[N] と T &[N]
しかし、この違いがまだ理解できません・・・・orz

579:デフォルトの名無しさん
09/10/10 10:49:02
構文解析のルールの詳しいことはよく理解してないけど

T [N] => Tの配列
T &[N] => Tへの参照の配列
T (&)[N] => T[N]への参照

となってる模様。ちなみに参照の配列はコンパイルできない
このへんは仮引数名の省略とか括弧の意味とかいろいろあって直感的には理解しにくいわ

580:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/10 11:41:45
>>579
>>580
ありがとうございます、大変よく分かりました。

582:デフォルトの名無しさん
09/10/10 20:42:52
stringstreamってどんな感じで実装されてるんでしょうかね?
stringみたいに内部で独自のメモリ管理方法を取ってるのか、vectorのようにベタな連続メモリなのか、それともまったく違うのか・・・

583:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/10 21:26:49
>>583です
補足というか、行数の関係で書けませんでした、環境はVS2005 です。

585:デフォルトの名無しさん
09/10/10 21:31:47
ごめんなさい、スレを汚してしまいました
解決しましたというか・・・・tohoho情けない
× Point<int>::set(12, 34);
○ Point<int> set(12, 34);

586:デフォルトの名無しさん
09/10/10 22:04:28
いいんだよ^^

587:デフォルトの名無しさん
09/10/10 22:14:26
>583
void set(const T& x, const T& y) にする。

588:デフォルトの名無しさん
09/10/11 06:51:57
>>585
set という変数を用意したいのか?
メンバ関数のsetを呼び出したいのかはっきりしろ。

589:デフォルトの名無しさん
09/10/11 13:34:28
>>583
もしsetという名前のメンバ関数を呼び出したくて、しかもインスタンス
無しで呼び出したいのなら、そのメンバ関数はstaticでなければならない

590:デフォルトの名無しさん
09/10/11 13:37:55
でもインスタンスがないと当然 this が無いから、x_とy_に代入しようと
するとエラーになるな

質問者はその当たりをはっきり質問するように

591:デフォルトの名無しさん
09/10/11 19:02:19
>>583です
皆さん、フォローありがとうございます。今回のset は変数としての振る舞いを期待していました。



592:デフォルトの名無しさん
09/10/12 01:01:09
strstrのように、あるメモリ領域から特定のバイト列を検索する標準関数は
あるでしょうか。VC++2008独自関数でもかまいません。
strchrに対するmemchrのようにmemmem?なんてのがあればいいんですけど。

593:デフォルトの名無しさん
09/10/12 02:26:50
標準関数は無いと思うけど
もし何度もその探索を実行するなら
(\0終端の文字列と違い、長さがわかっているのだから)
BM法かなんかでの探索を自前で実装するのが良いんじゃないかね。

まあ1度しか使わないのなら、そんなことせずに
先頭文字を探してそこから比較する、いわゆる力任せ法でも充分だろうけどね。

594:デフォルトの名無しさん
09/10/12 02:34:09
std::search() とか?

595:デフォルトの名無しさん
09/10/12 10:05:53
traitsって何者なんですか?

596:デフォルトの名無しさん
09/10/12 10:11:55
曲者

597:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/12 11:56:51
shift_jisを使わない

599:デフォルトの名無しさん
09/10/12 11:58:24
>>597
string s("ひょうじ");

600:597
09/10/12 11:59:06
自己解決しました。できないようです。
URLリンク(ml.tietew.jp)

601:デフォルトの名無しさん
09/10/12 12:45:42
ソースをSJIS以外にしてコンパイル

602:デフォルトの名無しさん
09/10/12 13:30:11
すみません。

趣味で、VC++のMFCで、いろいろ作っているんですが、もう5年くらいやっていて
だいぶというかかなり本格的なものも作れるようになりました。
自分は文系なんでよく知らないのですが、プログラマに就職しようと思えばできるんでしょうか?

今の職場は単調作業なので、ちょっと刺激がほしいです。よかったら、転職しようとおもうんですが・・・どうでしょうか?

603:デフォルトの名無しさん
09/10/12 13:35:23
プログラマ板で聞いてください

604:デフォルトの名無しさん
09/10/12 14:32:08
>>602
貴方の人生こんな初心者スレで聞いて棒に振ってもいいんですか??

605:デフォルトの名無しさん
09/10/12 16:44:51
関数ポインタの配列を使った関数呼び出しはc++ではどうやって実現させたらいいですか

606:デフォルトの名無しさん
09/10/12 16:47:56
>>605
Cと何かちがったっけ??

607:デフォルトの名無しさん
09/10/12 16:48:10
普通の関数はCと同じ。
クラスのメンバ関数の関数ポインタは手を出さないほうが身のため。

608:デフォルトの名無しさん
09/10/12 17:14:10
初心者なので詳しく答えられる方だけ回答お願いします

609:デフォルトの名無しさん
09/10/12 17:15:19
初心者なのできちんと説明できない人は口を出さないでください
イライラします

610:デフォルトの名無しさん
09/10/12 17:19:24
初心者ならどんな回答も学ぶべきことがあるはずなのでありがたく思うべきです

611:デフォルトの名無しさん
09/10/12 17:20:50
初心者なのぐぐれません。

612:デフォルトの名無しさん
09/10/12 17:21:32
初心者なのでよみとれません。

613:デフォルトの名無しさん
09/10/12 17:23:43
初心者なので日本語わかりません。

614:デフォルトの名無しさん
09/10/12 17:53:40
それではboost.functionの説明を始めようか

615:デフォルトの名無しさん
09/10/12 19:10:08
がんばってコード書いたのによくよく調べるとSTLとかBoostに同じしかも完全に上位のコードとかがあると泣けるんだがしかし

616:デフォルトの名無しさん
09/10/12 19:17:11
頑張る前に調べような。そういうのが使える環境ならなおさらだ。

617:デフォルトの名無しさん
09/10/12 19:45:28
そりゃ一回は調べるんだけど見逃してたりするんでさ

618:デフォルトの名無しさん
09/10/12 19:49:27
コードを書いたことが明日への礎になる。

619:デフォルトの名無しさん
09/10/12 19:57:45
中で何やってるのか全く理解できないようなコードを使ってトラブルと
どうにもならなくなるしな。

620:デフォルトの名無しさん
09/10/12 20:13:41
>>615 それはいい勉強をしたと思え。
ただライブラリを使ってるだけよりいい経験を積んだんだ。


621:デフォルトの名無しさん
09/10/12 20:27:56
・boostを眺める
・欲しい機能を見つける
・使ってみる
・boostを参照せずに同じ様な機能の縮小版を作ってみる
・挫折する
・boostはどうやってるんだろうと思いながらソースや解説をみて学ぶ

俺は大体こんなかんじで勉強になった functionとか

622:デフォルトの名無しさん
09/10/12 22:23:13
連結リストを実装するのはCでよくある勉強だし、ポインタ完全制覇とか読むと実装したくなるしな。
それをSTLで既にあるじゃんとか言って馬鹿にする奴はいないだろ。

623:デフォルトの名無しさん
09/10/12 22:25:27
そりゃまぁ勉強目的でやるんならね

624:デフォルトの名無しさん
09/10/12 22:32:21
時には馬鹿にならないとやる気にならないこともある。
Boostにあるからいいかではなかなか重い腰が上がらない。

625:デフォルトの名無しさん
09/10/12 23:37:36
namespaceでもprivateとかpublic使えればいいのに

626:デフォルトの名無しさん
09/10/12 23:50:49
anonymous namespaceが近いんじゃない?

627:デフォルトの名無しさん
09/10/12 23:57:13
>>625
staticメンバ関数で、それ専用のクラスを作るのはどうだろう。
気分的にちょっとアレだけど

628:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/13 00:30:43
・規約でBoostを禁止しているプロジェクトにげんなりする。

630:デフォルトの名無しさん
09/10/13 01:46:06
>>628
namespaceだと名前空間を汚す気があれば突破されてしまうが。

631:デフォルトの名無しさん
09/10/13 04:51:45
静的関数のテンプレート関数版みたいなもんか。

クラステンプレートfugaの静的メンバ関数にはしたくなさそうだな。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch