■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part36
501 名前:>>492 :04/10/11 20:01:37
>>494
vc6です!


502 名前:デフォルトの名無しさん :04/10/11 20:08:42
>>498
リムーバブルディスクでメディア引き抜かれた場合とか、あとはメディア
不良で一部セクタに書き込めない場合。たいてい OS やライブラリが
バッファリングしてるから fwrite() は成功しちゃう。

503 名前:デフォルトの名無しさん :04/10/11 20:13:47
おいおい、大丈夫かよお前ら。書き込み後のfclose()の戻り値チェックしないなんて有り得ねぇよ。

504 名前:デフォルトの名無しさん :04/10/11 20:46:35
やべー

505 名前:デフォルトの名無しさん :04/10/11 20:48:09
チェックするヤツの方がすくねぇよ

506 名前:デフォルトの名無しさん :04/10/11 20:58:31
>>505
まぁ、用途によるよな。

別にファイル壊れてても構わん状況ならチェックしないだろうし、
定期バックアップを行うアプリを書いてるならチェックしないのは
論外。

俺もあまりチェックしてない。

507 名前:デフォルトの名無しさん :04/10/11 20:59:21
わざわざ書き込み後のfclose()の戻り値チェックするなんて有り得ねぇよ

508 名前:デフォルトの名無しさん :04/10/11 21:00:20
>>503が煽ってるだけなのか、まともなPGならチェックしてるのかどっちだ?

509 名前:デフォルトの名無しさん :04/10/11 21:02:08
これだけの情報がそろってチェックしないやつの気が知れない。
今まで自分の書いたノーチェックなコードを正当化したいだけなんだろ。
いいんだよ、これから気をつければ。

510 名前:デフォルトの名無しさん :04/10/11 21:02:15
fstreamは閉じるのに失敗したときどうなるの?
いや、C++スレだしさ、いちおう。

511 名前:デフォルトの名無しさん :04/10/11 21:08:19
>>510
closeに戻り値有るよ。
ついでに badbit だか failbit だか立つよ。

512 名前:デフォルトの名無しさん :04/10/11 21:10:05
closeに失敗したらどうすりゃいいですか

513 名前:デフォルトの名無しさん :04/10/11 21:16:23
>>511
でも普通はデストラクタで勝手に閉じてもらうわけで

514 名前:デフォルトの名無しさん :04/10/11 21:23:34
エラーコードを見てから考えろ。

515 名前:デフォルトの名無しさん :04/10/11 21:24:05
fcloseの戻り値をチェックすればそれで書き込みが保証されると思ってる
バカがいるスレはここですか?

516 名前:デフォルトの名無しさん :04/10/11 21:25:09
>>513
普通?エラーを検知できない方法がどうして普通だと言い切れるのかね?

517 名前:デフォルトの名無しさん :04/10/11 21:26:12
>>515 エスパーキター

518 名前:デフォルトの名無しさん :04/10/11 21:26:36
エラーを検知できることの大切さを知らない>>515は学生。

519 名前:デフォルトの名無しさん :04/10/11 21:27:14
普通もう一回読んでベリファイ

520 名前:デフォルトの名無しさん :04/10/11 21:29:23
>>519
一回で安心するやつは素人

521 名前:デフォルトの名無しさん :04/10/11 21:29:27
だれだこんなに雑魚が群がる餌撒いたやつは

522 名前:デフォルトの名無しさん :04/10/11 21:30:26
ネタかマジか解からなくなってきたのでageときますね

523 名前:495 :04/10/11 21:31:20
俺だよ。俺オレ

524 名前:デフォルトの名無しさん :04/10/11 21:34:54
>>523
誰だよ、お前。
おれだよ

525 名前:デフォルトの名無しさん :04/10/11 21:36:48
とりあえず示談金の前払いで500万円振り込んでおいてください

526 名前:デフォルトの名無しさん :04/10/11 21:39:12
オレはチェックしねーよ。チェックしても、その後どーしよーもねぇじゃん。

527 名前:デフォルトの名無しさん :04/10/11 21:39:39
エラーメッセージくらい出せるだろ

528 名前:デフォルトの名無しさん :04/10/11 21:39:53
そこまで厳密にやりたいなら、CRTなんか使わずシステムコール直に発行しろよ。

529 名前:デフォルトの名無しさん :04/10/11 21:50:36
書き込んだフリしてエラーが出てても黙ってるアプリはいやだな・・・

530 名前:デフォルトの名無しさん :04/10/11 21:54:46
書き込んだフリしてエラーが出てても黙ってるのがCRT

531 名前:デフォルトの名無しさん :04/10/11 21:57:03
>>530
え?どういうこと?

532 名前:デフォルトの名無しさん :04/10/11 22:07:42
Cathode Ray Tube だったら輝点の一つや二つ欠けててもmおndawe

533 名前:デフォルトの名無しさん :04/10/11 23:11:23
おい、Cathode Ray Tube の輝点をヴェリファイできんぞ

534 名前:>>492 :04/10/11 23:11:34
誰か答えてください!
環境はVC6です。


535 名前:デフォルトの名無しさん :04/10/11 23:21:31
>>534
ユニコードを使用するようにオプション変更してみると
ロケール設定しなくても動くかもよ。
ただの勘だけど。

536 名前:デフォルトの名無しさん :04/10/11 23:22:27
うごかないし、そういうもんだ。
通常のロケールはjapaneseではなくCだし

537 名前:デフォルトの名無しさん :04/10/11 23:28:00
>>536
通常のロケールがCだというのはわかりましたが、
なんで、それで表示されないんですか?

そもそもロケールってなんあんでしょうか?


538 名前:デフォルトの名無しさん :04/10/11 23:28:42
ロケールって、わざわざワイド文字列の有効性をチェックするの?
例えば、Windowsだと WriteConsoleW() にそのまま流し込めば表示されると思うんだが、
ロケールに合わない文字を取り除く処理が入るってこと?

539 名前:デフォルトの名無しさん :04/10/11 23:30:43
>>637
お前無能の極みだな
少しは自分で調べろよ

540 名前:デフォルトの名無しさん :04/10/11 23:31:50
×>>637
>>537

541 名前:デフォルトの名無しさん :04/10/11 23:32:09
>>537
そういう仕様だから。VC6は。

542 名前:sage :04/10/11 23:32:40
>>539
ワラタ


543 名前:デフォルトの名無しさん :04/10/11 23:34:02
>>539
体をはったギャグですね(プッゲラ


544 名前:デフォルトの名無しさん :04/10/11 23:35:24
WriteConsoleWはすべてのプラットフォームでサポートされているんだ。

545 名前:デフォルトの名無しさん :04/10/11 23:46:06
streamに対してprintf書式指定使いたかったらboost使えばええやん。

546 名前:デフォルトの名無しさん :04/10/11 23:50:06
>>545
C++ではprintfは全部cout<<で置き換えるべきなのですか?

547 名前:デフォルトの名無しさん :04/10/11 23:51:29
そうすべきだね

548 名前:デフォルトの名無しさん :04/10/11 23:58:06
でもscanfはcinで置き換えられないhホ

549 名前:デフォルトの名無しさん :04/10/12 00:04:40
>>548
自前でどうにかしたほうがscanfよりまだましだと思うが。

550 名前:デフォルトの名無しさん :04/10/12 00:06:30
printf と sprintf の関係みたいに
文字列も stream と同じ様に扱うにはどうすればいいですか?

551 名前:デフォルトの名無しさん :04/10/12 00:07:44
>>550
stringstream

552 名前:デフォルトの名無しさん :04/10/12 00:07:54
>546
どうでもいいと思う

553 名前:545 :04/10/12 00:09:03
いや、その、ごめん。ネタだったんだ。そんなに食いつかないで。

554 名前:546 :04/10/12 00:09:47
あわわ。>>553の名前は間違いです。546です。

555 名前:デフォルトの名無しさん :04/10/12 00:20:20
>>549
自前でscanf作るのと何か違うのか?

556 名前:デフォルトの名無しさん :04/10/12 00:22:16
C++でのscanfのような危険どころを教えてください。

557 名前:デフォルトの名無しさん :04/10/12 00:25:29
scanf

558 名前:デフォルトの名無しさん :04/10/12 00:29:29
型安全じゃない事とか

559 名前:デフォルトの名無しさん :04/10/12 00:30:48
型クルクルパーな奴が使う限り同じ

560 名前:デフォルトの名無しさん :04/10/12 00:31:42
低脳のフリをすることを、自分が本当に低脳なことの隠れ蓑にする害獣ども

561 名前:デフォルトの名無しさん :04/10/12 00:40:24
Rubysaikyou !!!!!!!!!!!!!!!!!!!!!!

562 名前:デフォルトの名無しさん :04/10/12 00:48:52
正直、C++に型安全なんか期待していない

563 名前:デフォルトの名無しさん :04/10/12 00:54:55
C++ で無名関数がサポートされるのはいつになりますか?

564 名前:デフォルトの名無しさん :04/10/12 00:59:02
明日

565 名前:デフォルトの名無しさん :04/10/12 01:10:47
明日という名の永遠

566 名前:デフォルトの名無しさん :04/10/12 01:17:34
>>563
boost::lambdaでも使っとけ

567 名前:デフォルトの名無しさん :04/10/12 01:23:25
>>566
重い

568 名前:デフォルトの名無しさん :04/10/12 01:24:34
>>567
そうでもない

569 名前:デフォルトの名無しさん :04/10/12 01:25:18
>>567 コンパイル時間の話だよな?

570 名前:デフォルトの名無しさん :04/10/12 01:25:46
boostは標準ではないのでまだ使いたくない。
→自分で実装するか。

571 名前:デフォルトの名無しさん :04/10/12 01:27:02
→自分で実装してドツボ
→やっぱboost使うか

572 名前:デフォルトの名無しさん :04/10/12 01:27:51
そんなこたぁない

573 名前:デフォルトの名無しさん :04/10/12 01:39:12
自分で実装するぐらいならboostだろ

574 名前:デフォルトの名無しさん :04/10/12 01:42:22
STLにもファンクションオブジェクトならある。

575 名前:デフォルトの名無しさん :04/10/12 02:12:41
>>569
他に何があんだよ

576 名前:マイク ◆yrBrqfF1Ew :04/10/12 03:34:52
C++はtype safeで最高だな。

577 名前:デフォルトの名無しさん :04/10/12 04:55:02
boost本もけっこう重いね

578 名前:Ruby!!!!!!!!!!!!!!!!!! :04/10/12 05:00:19
糞本だろ。アレ

579 名前:デフォルトの名無しさん :04/10/12 06:56:02
>>578
糞本いいながら買ってるのか。

580 名前:デフォルトの名無しさん :04/10/12 10:20:38
>>579
買ったから糞本だと解かるんじゃないの

581 名前:デフォルトの名無しさん :04/10/12 10:46:04
クラス内でループ処理が必要でx[3]の様に配列を作成しているのですが、
クラス外からは、abc.aやabc.bの様に参照したいと思っています。

現在は
class abc{
    int x[3];
public
    int *a,*b*,c;
};
abc::abc()
{
    a=&x[0];
    b=&x[1];
    c=&x[2];
}
の様に書いているのですが、これだと*abc.aとしないといけません。
処理スピードを落とさずに、abc.aでアクセスできるようにする方法はないでしょうか。

582 名前:デフォルトの名無しさん :04/10/12 10:56:27
>>581
どうしても、どっちかからのアクセスは間接参照になる(けど、本当に遅くなるか?)。
あと、配列の方を実体とするなら、公開用の変数はポインタではなくて参照にするのが普通だと思います。

583 名前:デフォルトの名無しさん :04/10/12 11:29:15
public:
 int &a, &b, &c;

abc::abc()
 : a(x[0]), b(x[1]), c(x[2])

584 名前:デフォルトの名無しさん :04/10/12 12:29:29
そこでunionですよ。

>>582
コンストラクタがinlineじゃ無いと a, b, c が何をさしてるのか外からはわからないから最適化とかに影響を与えると思う。
ポインタの場合も同じ話だが。

585 名前:デフォルトの名無しさん :04/10/12 12:44:06
>>584
unionだと、規格で保証されている訳じゃないから微妙に不安。
組み込み系とか、ポータビリティを意識しない場合にはやるけど。

そもそも変数を公開している時点で、最適化する時にはクラスabcを知らなきゃできない、と思う。

586 名前:デフォルトの名無しさん :04/10/12 13:47:52
>>585
unionは、ISO標準C++では保証されてないの?

587 名前:デフォルトの名無しさん :04/10/12 14:44:10
こういう使い方は保証されてない


588 名前:デフォルトの名無しさん :04/10/12 14:46:28
>>586
メモリ配置がどうなるかは保証されてません。
でもま、実際ほとんどの環境で予想通りに動くと思うけどね。

589 名前:デフォルトの名無しさん :04/10/12 14:46:36
>581
関数じゃだめなの?
int &a() {return x[0];}

590 名前:デフォルトの名無しさん :04/10/12 14:51:39
>>581
つーかそういう時こそテンプレでしょ
public:
  template<int i>
  int Ret() const { return x[i]; }

591 名前:デフォルトの名無しさん :04/10/12 15:01:44
えー?

592 名前:デフォルトの名無しさん :04/10/12 15:02:47
>>590 それどうやって使うつもりヨ

593 名前:デフォルトの名無しさん :04/10/12 15:13:04
>>592

int main()
{
 abc a;
 std::cout << a.template Ret<1>() << std::endl;
}

594 名前:デフォルトの名無しさん :04/10/12 15:13:45
というかtemplateは不要だったスマソ

595 名前:デフォルトの名無しさん :04/10/12 15:17:57
>>587-588
勉強になりますたー

596 名前:デフォルトの名無しさん :04/10/12 15:38:38
char *p=
でchar配列の先頭にポインタを合わせた後、
*pからこのchar配列の長さを知る方法を教えてくれないと泣きます。
教えてくれると喜びます。

597 名前:デフォルトの名無しさん :04/10/12 15:41:03
char*だけ渡されてそんなの出来るわけねーだろアホか

598 名前:デフォルトの名無しさん :04/10/12 15:43:59
>597
ありがとうございます。
三度の飯より喜んでおります。大体8飯くらいです。

599 名前:デフォルトの名無しさん :04/10/12 16:05:10
>>596-598
なぞはすべて解けた。自作自演だな。

600 名前:デフォルトの名無しさん :04/10/12 16:27:52
>>523
おれおれ詐欺

601 名前:デフォルトの名無しさん :04/10/12 18:06:31
もうstrcatなんてうさんくさいものは使わないでマロックで自分で結合する!

602 名前:デフォルトの名無しさん :04/10/12 18:07:40
>>596
template <int N> int Hoge(char (&foo)[N]) {
char (*p)[N] = foo;
return sizeof *p;
}

603 名前:デフォルトの名無しさん :04/10/12 18:50:38
>>601
それ、C++じゃないし。

604 名前:デフォルトの名無しさん :04/10/12 21:31:51
>>603

605 名前:デフォルトの名無しさん :04/10/12 21:38:35
>>605

606 名前:デフォルトの名無しさん :04/10/12 21:41:20
>>601( ´,_ゝ`)プッ

607 名前:デフォルトの名無しさん :04/10/12 21:41:46
あほばっかだな

608 名前:デフォルトの名無しさん :04/10/12 21:43:02
まあ2chには色んなレベルの香具師が来るからな

609 名前:デフォルトの名無しさん :04/10/12 22:45:47
なんだよ2匹だけか

610 名前:デフォルトの名無しさん :04/10/12 23:51:57
メンバ変数の初期化順序なんですが

class A
{
public:
A(int a) : a_(a), b_(a*2), c_(b_*2) {}

const inta_, b_;
const intc_;
};

だと意図通りに初期化がされるのですが、c_の宣言をa_, b_の前に持ってくるとc_の値がおかしくなります。
初期化順が、コンストラクタの : 以降(イニシャライザって言うんでしたっけ?)の初期化順に関係なく
宣言順に依存しているからだと思うのですが、これは規格で決められているのでしょうか?

611 名前:デフォルトの名無しさん :04/10/12 23:56:52
>>610
決まってる。初期化は宣言された順序で行われる。

612 名前:デフォルトの名無しさん :04/10/12 23:56:59
>>610
そうです

613 名前:デフォルトの名無しさん :04/10/12 23:59:15
>>610
つEffective C++, Exceptional C++

614 名前:610 :04/10/13 00:11:13
>>611-613
ありがとうございます。
>つEffective C++, Exceptional C++
C++やる人には必須なんでしょうけど…なかなかいい値段ですね…(´・ω・`)

あと、>>610のclass Aのようにあるメンバ変数が他のメンバ変数に依存している設計はどうなのでしょうか?
constが無ければコンストラクタの{ }内で順番に初期化すればいいのですが
constが付いていると : の所でしか初期化の機会がありませんよね。
そうすると宣言順が重要になって、うっかり変えてしまうと…
こういう設計は良くないのでしょうか?

615 名前:デフォルトの名無しさん :04/10/13 00:14:39
うん、設計がよくない気がする。

616 名前:デフォルトの名無しさん :04/10/13 00:18:26
やっぱりクソ言語だな

617 名前:デフォルトの名無しさん :04/10/13 00:21:53
>>614
ここまでの情報だと、実際のデータメンバはひとつにして、
おとなしくメンバ関数で値を返すようにするのが正解なんだろうな。

618 名前:デフォルトの名無しさん :04/10/13 00:23:52
const_cast して代入しちゃえば?

619 名前:デフォルトの名無しさん :04/10/13 00:25:04
>>614
必須じゃない
そんな値段で引いていたら本当に必須の本(PDF)が買えない

620 名前:デフォルトの名無しさん :04/10/13 00:26:22
>>613
「つ」ってよくみるけど、どういう意味があるの?


621 名前:デフォルトの名無しさん :04/10/13 00:27:56
つーか(ていうか)の略

622 名前:デフォルトの名無しさん :04/10/13 00:29:39
( ・∀・)つ
これの手だろ。

623 名前:デフォルトの名無しさん :04/10/13 00:30:00
>>620

モナー、ギコなど、猫の手であることが多い

624 名前:デフォルトの名無しさん :04/10/13 00:30:16
いや↓の「つ」の部分でしょ

(・∀・)つ

625 名前:デフォルトの名無しさん :04/10/13 00:31:17
性器か?

626 名前:デフォルトの名無しさん :04/10/13 00:31:35
>>619
必須の本(PDF)って何です?

627 名前:デフォルトの名無しさん :04/10/13 00:31:50
マジレスすんなカスども

628 名前:デフォルトの名無しさん :04/10/13 00:32:42
>>626
ぐぐれ

629 名前:デフォルトの名無しさん :04/10/13 00:36:00
>>626
14882

630 名前:626 :04/10/13 00:37:54
>629
あれは$18だから買えないってことはないような・・・

631 名前:デフォルトの名無しさん :04/10/13 00:39:52
数万円はする

632 名前:デフォルトの名無しさん :04/10/13 00:41:15
>>5

633 名前:デフォルトの名無しさん :04/10/13 00:42:42
>>632
あれって合法なの?

634 名前:デフォルトの名無しさん :04/10/13 00:43:52
んなわけねーべ

635 名前:デフォルトの名無しさん :04/10/13 00:45:07
http://webstore.ansi.org/ansidocstore/product.asp?sku=INCITS%2FISO%2FIEC+14882%2D2003
$18.00だってば

636 名前:デフォルトの名無しさん :04/10/13 00:45:57
>>635
本当だ。安くなったな〜

637 名前:デフォルトの名無しさん :04/10/13 00:45:58
5のはFinal Draftで著作権が発生していない版だから合法・・・のはず・・・

638 名前:635 :04/10/13 00:50:02
>>5のPDFは違法。PDFじゃない方はFinal Draftなので合法。
ちなみに>>5のISOで買うよりも何故か>>635のANSIで買ったほうが安い。
内容は同じらしい。

639 名前:デフォルトの名無しさん :04/10/13 04:01:59
0 == 0 で返される値って何型ですか?
bool?int?

640 名前:デフォルトの名無しさん :04/10/13 04:06:40
>>639
cout << (typeid (0 == 0) == typeid (bool)) << endl;


641 名前:デフォルトの名無しさん :04/10/13 05:04:14
>>640って規格?環境依存?

642 名前:デフォルトの名無しさん :04/10/13 05:06:34
>>641
640の何が?

#include <typeinfo>
か?


643 名前:デフォルトの名無しさん :04/10/13 05:10:40
>>642
結果でしょ。
VC++6だとtypeid(0==0).name()がlongだったり

644 名前:デフォルトの名無しさん :04/10/13 05:16:22
マジ!?
g++(3.3.4)でbool


645 名前:デフォルトの名無しさん :04/10/13 05:40:38
このへん?
13.6 Overloading
12 For every pair of promoted arithmetic types L and R, there exist candidate operator functions of the form
LR operator*(L, R);
LR operator/(L, R);
LR operator+(L, R);
LR operator-(L, R);
bool operator<(L, R);
bool operator>(L, R);
bool operator<=(L, R);
bool operator>=(L, R);
bool operator==(L, R);
bool operator!=(L, R);
where LR is the result of the usual arithmetic conversions between types L and R.


646 名前:デフォルトの名無しさん :04/10/13 06:00:01
>>645
当たり前っていったら当たり前な結果だな。うん。

647 名前:デフォルトの名無しさん :04/10/13 10:47:09
どっちでも困らないが

648 名前:デフォルトの名無しさん :04/10/13 11:18:37
オーバーロードの解決とか、template引数の推測とか、意味を持ちそうなところはいくらか思い当たるな。

649 名前:デフォルトの名無しさん :04/10/13 15:09:27
int変数を都合よくchar配列に入れてくれる関数って無いんですか?
検索の仕方が悪いのか、別なのが出てきます。
int 100を元に、
char c[]="100";のchar配列と同等の結果を返す関数です。

650 名前:デフォルトの名無しさん :04/10/13 15:15:55
>>649
snprintf() でドゾ。


651 名前:デフォルトの名無しさん :04/10/13 15:22:09
>>649
const char *でいいんだったら
boost::lexical_cast <string> (100).c_str ();
とかもあるけど
配列だとコンパイル字に10進での桁数を求めないといけないんだよね


652 名前:デフォルトの名無しさん :04/10/13 16:12:23
>>610の初期化順序の仕様のメリットを教えてください。

653 名前:デフォルトの名無しさん :04/10/13 16:13:30
もしくは、そんな仕様になってしまった理由を教えてください。

654 名前:デフォルトの名無しさん :04/10/13 16:22:03
ムシャクシャして決めた。
順番なら何でもよかった。
今は反省している。


655 名前:デフォルトの名無しさん :04/10/13 16:33:14
>>649
非標準だけど_itoa

656 名前:デフォルトの名無しさん :04/10/13 16:35:53
>>655
そんなあなたにも
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa2.html

657 名前:デフォルトの名無しさん :04/10/13 17:35:13
コンストラクタで昇順、デストラクタで逆順に破棄されるほうが都合がいいから。

親子関係のあるオブジェクトを同時に持つ場合に、親が先に死んだら困る場合もあるだろ。

これが初期化パラメータ順に破棄する仕様にすると、初期化の順序をオブジェクトごとに
記憶しなければいけない。
実際にやるとしたら使用したコンストラクタを一個覚えとくだけだと思うが、かなり無駄。


658 名前:デフォルトの名無しさん :04/10/13 18:02:18
親子なら子を殺すのは親の義務ではないのですか
私が直接殺すのは親だけではないのですか

659 名前:デフォルトの名無しさん :04/10/13 19:25:19
std::stringに格納されたアルファベットの文字列を大文字が含まれていれば小文字にしたいのですが
(e.g. This→this)、どうすればいいでしょうか?

660 名前:デフォルトの名無しさん :04/10/13 19:36:27
char character;
if (charcter <= 'A' && character >= 'Z')
 charcter = character + 0x20;

661 名前:デフォルトの名無しさん :04/10/13 19:40:07
>>659
for (size_t i=0; i<s.size(); ++i) {
if (isupper(s[i])) s[i] = tolower(s[i]);
}

662 名前:デフォルトの名無しさん :04/10/13 19:41:00
>>659
string str="Hello, World!";
transform(str.begin(), str.end(), tolower)

663 名前:デフォルトの名無しさん :04/10/13 19:43:45
transformだと日本語がダメ

664 名前:659 :04/10/13 19:45:53
>>660-662
ありがとうございます。1ヶ月かかって作ったショボいアプリがこれで完成します。

665 名前:デフォルトの名無しさん :04/10/13 19:57:10
>>662-663
そこでファンクタですよ

666 名前:デフォルトの名無しさん :04/10/13 20:14:08
すみませんが質問させて下さい。

vc6.0+win32環境です。

ツールバーをカスタムドローしてボタンのアイコンを書いています。
NM_CUSTOMDRAWメッセージを処理してNMCUSTOMDRAWのRECTメンバ
からアイコンの位置を取得する時に、ドロップダウンを持つボタンのみ
縦の位置がずれてしまいます(XP環境でテーマ(manifest)を置いている時に限りです)。

何方か位置がずれない方法を知りませんでしょうか?
よろしくお願いします。




667 名前:デフォルトの名無しさん :04/10/13 20:21:09
>>666
適切なスレに行って聞き直せ。

668 名前:デフォルトの名無しさん :04/10/13 20:23:19
>667
そうします。

669 名前:デフォルトの名無しさん :04/10/13 21:25:34
>>661
tolowerは英大文字でなければなにもしないことになっているからifは不要。

670 名前:デフォルトの名無しさん :04/10/13 21:46:49
>>669
マジで?
知らなかった

671 名前:デフォルトの名無しさん :04/10/13 21:59:18
>>670
大文字じゃなかった場合どうなると思ってたんですか

672 名前:デフォルトの名無しさん :04/10/13 22:02:45
>>671
知りたいか?あ?

673 名前:デフォルトの名無しさん :04/10/13 22:03:53
>>663
>>659は「アルファベットの文字列」と言っているんだから別に
いいとは思うが、transformでダメなら自分でループ回しても
ダメなんではないか?普通はtransformも中でループ回してる
わけだし。

674 名前:デフォルトの名無しさん :04/10/13 22:07:07
>>669
かきこんでからきづいた

675 名前:デフォルトの名無しさん :04/10/13 22:09:04
>>673
いまさらだけど、transformの第3引数にstr.begin()いれるの忘れてた。

std::wstringにしようよ

676 名前:デフォルトの名無しさん :04/10/13 22:15:42
今時wstringなんてダレも使ってねーよ

677 名前:デフォルトの名無しさん :04/10/13 22:23:31
>>673
自前のループなら、
前が日本語の1バイト目ならっていう部分を追加すればいいんだけど、
transformじゃそれが出来ないってことなんだろう。
で、それを受けて、
前が日本語の1バイト目であることを保存できるファンクタを使え、
というのが、>>665なんだと思う。

678 名前:デフォルトの名無しさん :04/10/13 22:24:26
使いまくってるが

679 名前:デフォルトの名無しさん :04/10/13 22:28:23
fstream系がファイル名にwchar_t cosnt*を受け取れないからなぁ。
なんか片手落ち。

680 名前:デフォルトの名無しさん :04/10/13 22:32:18
wstringってちょっと環境依存なところもあるよね。

681 名前:デフォルトの名無しさん :04/10/13 22:34:31
stringもバリバリ環境依存だと思うが

682 名前:デフォルトの名無しさん :04/10/13 22:35:33
UNIX上のgccなんかだとのっけからstd::wstringのtypedefがコメントアウトされてたりとかな…

683 名前:デフォルトの名無しさん :04/10/13 22:37:06
MBCS対応basic_stringってありますか?
reverseとかfindが日本語混ざるとだめぽ。

684 名前:デフォルトの名無しさん :04/10/13 22:39:05
CJK問題とか欧米の人々はアスキー以外どうでもいいと思ってるからなぁ

685 名前:デフォルトの名無しさん :04/10/13 22:39:53
>>665,677
25.2.3 Transform -2
Requires: op and binary_op shall not have any side effects.

686 名前:デフォルトの名無しさん :04/10/13 22:40:36
>>683
と言うことで、自分で作るしかない。

687 名前:デフォルトの名無しさん :04/10/13 22:42:57
VC++でmbstring.hってあるじゃないですか、
あれって、MSの勝手な拡張なんですか?
CRTがjapanese-awareになって素敵なんですが。
あと、TCHARとか。

688 名前:デフォルトの名無しさん :04/10/13 22:46:53
マイクロソフトはすげえ会社なんだよ

689 名前:デフォルトの名無しさん :04/10/13 22:47:07
>>687
その通り。

690 名前:デフォルトの名無しさん :04/10/13 22:51:38
>>683
MBCS仕様のchar_traitsを自作してみたらどう?

>>687
MSの独自拡張。但しBCCでも結構使える。

691 名前:デフォルトの名無しさん :04/10/13 23:04:06
MBCS対応のchar_traits作るのってまず無理だろ。
結局内部はwchar_tで入出力時に適宜変換しかない。

692 名前:デフォルトの名無しさん :04/10/13 23:04:24
template <class T>
void destroy( T* p )
{
    p->~T();
}

template <class FwdIter>
void destroy( FwdIter first, FwdIter last )
{
    while( first != last )
    {
        destroy( &*first ); // 1
        ++first;
    }
}

なんですが、1 の所は destroy( first ); とするのじゃダメなのでしょうか?

693 名前:デフォルトの名無しさん :04/10/13 23:06:21
ぽいんたじゃないから

694 名前:デフォルトの名無しさん :04/10/13 23:10:26
>692
イテレータが渡される可能性があるので,&*でポインタを取得する必要があります.
(ポインタが渡された場合,&*は意味なし)

695 名前:デフォルトの名無しさん :04/10/13 23:12:45
あ,ポインタもイテレータのモデルの一つか.

誤:イテレータが渡される
正:ポインタでないイテレータが渡される

696 名前:デフォルトの名無しさん :04/10/13 23:23:55
>>691
んじゃー、サロゲートペアなんか考えるとUTF対応も不可能だし
C++の文字列クラスは実質ASCIIとUCS4専用で使い物にならないでFAなのか?


697 名前:デフォルトの名無しさん :04/10/13 23:26:10
>>696
べつに ISO-2022 系列でも構わんが。いずれにしても固定長じゃないと
難しい気はする。

698 名前:デフォルトの名無しさん :04/10/13 23:30:55
basic_stringのMBCS対応って、メンバ関数だけの問題なんじゃないの?
std::stringを継承して、
findとかreverseとかの、MBCS時に問題になるメソッドをオーバライドすりゃーいいだけのように思えるんだけど。
char_traitsは関係無いって言うか。

的外れなこと言ってたらごめんなさい。

699 名前:デフォルトの名無しさん :04/10/13 23:33:42
ネット上か書籍でC++におけるマルチバイト文字列(+locale)の扱いに関する
良いリファレンスご教授願えませんか?英語でも構いません.
(もしかしてそんなもの無い?)

700 名前:デフォルトの名無しさん :04/10/13 23:34:06
stringは継承しない方が・・・

701 名前:デフォルトの名無しさん :04/10/13 23:38:27
char_traits は設計的にマルチバイトに対応できないというの結論でよろしいのか?
……数多の文字列クラスが巷に溢れているのも仕方なしだな。

702 名前:デフォルトの名無しさん :04/10/13 23:54:09
Shift_JIS/CP932ならまだ16bit化とかいう冗談があるがEUC-JPやISO-2022-JPはそれも無理だからな。


703 名前:デフォルトの名無しさん :04/10/13 23:57:07
UTF-16のサロゲートなしで行こう

704 名前:デフォルトの名無しさん :04/10/13 23:57:44
>>701
文脈依存のバイト列を扱うために char_traits<T>::state_type っつー型が
定義されてるみたいだけど、これだけだと道具不足なの? どう使われてるか
調べてないので、何とも言えんが。

705 名前:ああああ :04/10/14 02:01:44
wstring word = L"あいうえお";

とした場合に、wordには何かしらの文字コードが入ると思うのですが、
たとえば、UTF-16だとして、そのことはどこをみればわかりますか?


706 名前:デフォルトの名無しさん :04/10/14 02:04:33
>>705
自前でコード判定をするしかない。スレ違い。
【UTF8】文字コード変換【SJIS】
http://pc5.2ch.net/test/read.cgi/tech/1063177450/

707 名前:>>705 :04/10/14 02:37:48
>>706
いや・・・全然スレ違いではないと思うのですが・・・

ようは、wstringあつかうときに、文字コードの何を使うかを何処で決定しているかを知りたい。
たとえば、それが環境変数で設定されている値だとか、何かの設定ファイルがあるとか・・・
windowsとunixでは、決定の仕方が違うとか・・・そういうこと。


708 名前:デフォルトの名無しさん :04/10/14 02:40:39
マニュアルだろ

709 名前:706 :04/10/14 02:42:49
>>707
いや、スレ違い。なぜならば、文字コードはC++規格に含まれていない。

710 名前:デフォルトの名無しさん :04/10/14 02:45:08
規格にないboostの話をする奴らの立場は

711 名前:デフォルトの名無しさん :04/10/14 02:52:04
>>709
強情な人だな...
わからないなら、わからないといえばいいのに...



712 名前:デフォルトの名無しさん :04/10/14 02:54:05
localeconv

713 名前:デフォルトの名無しさん :04/10/14 03:00:56
>>707
決定とか、そういうの無いから

714 名前:デフォルトの名無しさん :04/10/14 03:28:04
>>707
氏ね

715 名前:デフォルトの名無しさん :04/10/14 11:48:50
テンプレートを勉強中なのですが、以下のコードがVC++.NET2003上でうまくコンパイルできません。
エラーの原因を教えていただけませんか?
#include <iostream>
#include <string>
template<class stringT>
class test {
private:
stringT str_;
public:
test(stringT str) : str_(str) {}
stringT::size_type get_str(){
return str_.find("e", 0);
}
};
int main() {

test<std::string> str("test");

std::cout<<str.get_str()<<std::endl;

return 0;
}
これをコンパイルすると以下のようなエラーメッセージが出ます。

warning C4346: 'stringT::size_type' : 依存名は型ではありません。
error C2146: 構文エラー : ';' が、識別子 'get_str' の前に必要です。
warning C4183: 'get_str': 戻り値の型がありません。'int' を返すメンバ関数とみなします。


716 名前:デフォルトの名無しさん :04/10/14 11:54:44
-stringT::size_type get_str(){
+typename stringT::size_type get_str(){

717 名前:デフォルトの名無しさん :04/10/14 11:55:54
>>716
あ!そんな簡単なことだったのですね。
どうもありがとうございます^^


718 名前:デフォルトの名無しさん :04/10/14 19:10:25
>>705
c_str()やbegin()から順にたどっていくのは?

719 名前:デフォルトの名無しさん :04/10/14 19:35:52
>>718
ha?

720 名前:デフォルトの名無しさん :04/10/14 19:38:50
hi?

721 名前:デフォルトの名無しさん :04/10/14 19:40:53
ho?

722 名前:デフォルトの名無しさん :04/10/14 22:12:28
がるぽ

723 名前:デフォルトの名無しさん :04/10/14 22:20:04
>>722
ヌッ

724 名前:デフォルトの名無しさん :04/10/14 23:33:54
ぬるッ

725 名前:デフォルトの名無しさん :04/10/15 00:05:22
>>724
ガぽ

726 名前:デフォルトの名無しさん :04/10/15 01:51:25
>>715
別にテンプレートの勉強するのはいいけれども、それは何かの
役に立つのかな…

template <typename charT>
class test {
private:
std::basic_string<charT> str_;


とかならまだ分かるが…

727 名前:デフォルトの名無しさん :04/10/15 02:03:15
>>726
std::string::size_typeって例えばfindメソッドなどの引数の型になっているね。
これは大抵size_t型がtypedefされているものだけど、Alphaマシン
とかだと必ずしもsize_tとは限らないからstd::string::size_type
で宣言するんだよ。

728 名前:デフォルトの名無しさん :04/10/15 02:13:14
>>727
そういう話ではないんじゃ

729 名前:デフォルトの名無しさん :04/10/15 07:00:47
>>726
そんなこと言ったら、 CharTraits や Allocator も引数に追加しないといけないんじゃないの?

730 名前:デフォルトの名無しさん :04/10/15 13:12:29
>>729
             ,. - ─── - 、
             /    ,       `ヽ.
            /〃//,. ,ィl/|l ト、 !、 、  ヽ
          ー'´| | l |1 | !l. l| ! | l.|ヽ ! !、 ',
             YレV!ヒエ「! |l.「_ト!Ll」| l l  l
           ! lハイJ |  ´|_jヽ. リ,! ! l. l |
             |l |l.} ー ,   L _,ハl.lトl l. | l
             |l ilト、   n  ''  ,1l|ィ| |l l |   パパ、大丈夫だよ♥
           _ 二,ニ^tュ--ェ_t1」l.|l !リ|_lノ   
       r7´   f r┐| 〔/ミヽ>,-、 ̄´
       Y       ー个‐'t  ハ-、_'ゝ、
        ヽ ._・ rく ̄ヽト-'丿  ヽ l
        / (・__,)ゝi┬'´ハ`     '`|
          |ヽ, イ   ノ┴くヽヽ、    /
        `´ ゝ┬ヘ`ヽ   |  `ー‐1
           ゝノ-‐^ー'一''丶  ヽ ヽ
           ト、_       `ーァ'¨不ヽ
            | | 「 ̄「 ̄l ̄ト、,イトヒi′
             l l. l   l  !  !└' l |
             └ L 」_,|__l_l.__L.l′
             |   |  |   |
              l   l   !   !
                l   l.   l   l
            ト--┤   !--‐1
              f‐t央j.   ト央ァヘ
              |  甘l、  / 甘  |
             l  ,.-‐ヽ レ'⌒ヽ/
            `く.__ ノ ゝ--‐′

731 名前:デフォルトの名無しさん :04/10/15 18:17:28
>>730
ハァハァお嬢ちゃんの臭いオシッコ飲みたい!!
(;´Д`)ハァハァハァ

732 名前:726 :04/10/15 23:25:49
>>730-731
言語系のスレでそういうのはやめてくれ、吐き気がする。

>>729
いや、まぁ、現実的にはそうなるかもしれないけれども、
例としての良さの問題だから。

733 名前:デフォルトの名無しさん :04/10/15 23:42:49
別にstringをテンプレート引数にしても全然おかしくねーよタコ

734 名前:デフォルトの名無しさん :04/10/16 00:04:44
>>733
いや、そういう話ではないだろう。

735 名前:デフォルトの名無しさん :04/10/16 00:32:17
>>734
どういう話なの?

736 名前:デフォルトの名無しさん :04/10/16 02:03:18
放置しろよ

737 名前:デフォルトの名無しさん :04/10/16 02:50:53
basic_stringをテンプレート引数にする意味がないからだろ。
string・wstring以外で同じメンバ関数をもったクラスなんてあまりないし、
そもそもテンプレートじゃなくて派生させるだろうし。

738 名前:デフォルトの名無しさん :04/10/16 03:18:38
>>737
どうやってメソッドの引数や戻り値の型が異なるクラスを
派生でキレイに実現するのかぜひ教えてください。

739 名前:デフォルトの名無しさん :04/10/16 03:22:04
仮想デストラクタをもたないクラスから派生するのはちょっと・・・

740 名前:737 :04/10/16 03:27:26
>>738
まずは、basic_stringと酷似するメソッドを持つクラスを
「string/wstringとその派生」以外で提示して頂いた方が良いでしょう。

そんなわけで、
私めはここにて縄を持って待ち伏せ致しますので、
>>738さんは屏風から虎を追い出してください。

741 名前:デフォルトの名無しさん :04/10/16 03:31:46
自分が間違った事を言ったことぐらい素直に認めろよ

742 名前:デフォルトの名無しさん :04/10/16 03:36:20
だから放置しろっつったのに

743 名前:デフォルトの名無しさん :04/10/16 05:51:01
>>739
PODだけ持たしとけば問題ない。


744 名前:デフォルトの名無しさん :04/10/16 19:09:51
>>743
ポインタを持ってたら?

745 名前:デフォルトの名無しさん :04/10/17 13:58:56
さがりすぎ

746 名前:デフォルトの名無しさん :04/10/17 17:37:00
std::stringを使用してSQLクエリを組み立てているんですけど

std::string s;

s += "SELECT ";

s += "COL";

s+= "FROM";

とかやってると効率が悪い感じです

stringstream?とか使うと効率はアップするんでしょうか

747 名前:デフォルトの名無しさん :04/10/17 17:50:49
C++以前の問題。
パラメータ付きクエリを使ってない以上、何やっても効率は最低。


748 名前:デフォルトの名無しさん :04/10/17 17:52:07
sprintfか、boost::format とか。

749 名前:デフォルトの名無しさん :04/10/17 17:54:21
sprintf(s, "SELECT %s FROM %s", "col1, col2", "table");

750 名前:デフォルトの名無しさん :04/10/17 18:15:53
>>749
御社では包括的sprintf使用禁止条約に調印してないんですか?


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.