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


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

C++相談室 part13
501 名前:デフォルトの名無しさん :02/12/09 14:11
>>495
「実体」というのは実行時に定まるものだから、コンパイル時に決定するのは無理だ。やるなら、

template<typename Cont, typename Func>
void for_each_c( Cont& c, Func f ) { std::for_each(c.begin(), c.end(), f); }

を常にかますようにして気をつける、程度だろうねぇ。

502 名前:デフォルトの名無しさん :02/12/09 14:47
>>498
なるほど、解説どうもです。
Winsockをいかに使うかが味噌なんですね。
UNIXだとsocketをうまく使いこなせと。。。

503 名前:デフォルトの名無しさん :02/12/09 16:40
C++おもしろいあげ

504 名前:デフォルトの名無しさん :02/12/09 16:53
boostでSocketライブラリの実装が始まってるね。
かなーり、期待してます。

505 名前:デフォルトの名無しさん :02/12/09 17:57
えっsocketライブラリって標準であるようなものじゃないの?

506 名前:デフォルトの名無しさん :02/12/09 18:30
>>505
仕様書でも見れば。

507 名前:デフォルトの名無しさん :02/12/09 19:50
g++のコンパイル結果のオブジェクトコードが,
gccでのオブジェクトコードに対して大きくなりすぎて困っています.
オブジェクトコードが小さくなる様に,
コンパイルする方法ってあるでしょうか?

パソコン初心者板総合質問スレッドVol.235から
誘導されてきました.


508 名前:デフォルトの名無しさん :02/12/09 19:55
gcc, g++ で

int main(){}

をコンパイルしてみた

-rwxr-xr-x 1 tohkubo tohkubo 13548 Dec 9 19:53 g++.out*
-rwxr-xr-x 1 tohkubo tohkubo 13298 Dec 9 19:53 gcc.out*

確かにg++の方が大きいな(w

509 名前:507 :02/12/09 20:15
>>508
私の環境だと,g++.outが 60kB, gcc.out 24kBになります.
実際にコンパイルする必要があるプログラムでは,
サイズに10倍以上の差が開くのですが,
NFSでファイルサーバ上でコンパイルするため,
この差がコンパイル速度に致命的な影響を与えます.
/tmp/は容量が少なすぎて,オブジェクトコードを格納するのに足りません.


510 名前:デフォルトの名無しさん :02/12/09 20:31
>>509
#include <iostream>とかすると、それだけで膨大な量の継承をリンクするので
大きくなるぞ。だから、小さくしたければC++標準ライブラリをできるだけ使わない
ようにするしかない。

511 名前:508 :02/12/09 20:37
ちなみに strip かけるとこうなる。

-rwxr-xr-x 1 tohkubo tohkubo 3244 Dec 9 20:33 g++.out*
-rwxr-xr-x 1 tohkubo tohkubo 2972 Dec 9 20:33 gcc.out*

でもコンパイル速度じゃぁ strip 意味無いねぇ。
# なんか user 名を晒してしまった事に今更気付いた・・・

512 名前:デフォルトの名無しさん :02/12/09 20:37
コンパイルオプションに -g 付けてると
gcc より g++ の方が大きくなるよ


513 名前:デフォルトの名無しさん :02/12/09 20:39
ソケットライブラリって・・・I/Oストリームのクラス階層に組み込んだりするんだろうか。
basic_socketstreambuf とか basic_isocketstream とか・・・
UDPはダメか。

514 名前:デフォルトの名無しさん :02/12/09 20:41
gccでもコンパイル出来るプロジェクトならgcc使っとけ

515 名前:508 :02/12/09 20:43
strings の結果を diff とってみますた

/lib/ld-linux.so.2
__gmon_start__
-libc.so.6
+libstdc++-libc6.2-2.so.3
+_DYNAMIC
+_init
__deregister_frame_info
+_fini
+_GLOBAL_OFFSET_TABLE_
+__register_frame_info
+libm.so.6
_IO_stdin_used
+libc.so.6
__libc_start_main
-__register_frame_info
+_edata
+__bss_start
+_end
GLIBC_2.0
PTRh

>>512
今は -g は関係無いかと。
# って俺のやってる所もかなり関係無いに近いけど(w

516 名前:デフォルトの名無しさん :02/12/09 20:45
RTTIの情報が入っているのかなあ。

517 名前:507 :02/12/09 20:51
>>510
CからC++に乗り換えた理由がSTLだったので,
標準ライブラリできるだけ使わないというのは,
何だか哀しい気分です.

>>511
stripしたら1/6以下に小さくなりました.
コンパイル後にstripで小さく出来るんなら,
コンパイラが吐くファイルを直接小さくして
おく事は可能なはずですね.
何か余計なオプションつけてるんですかね.


518 名前:デフォルトの名無しさん :02/12/09 20:52
>508
バイナリサイズを比較するなら static link にしないと、意味がないような。

519 名前:デフォルトの名無しさん :02/12/09 20:53
>517
> コンパイラが吐くファイルを直接小さくして
> おく事は可能なはずですね.
んなわけない。

オブジェクトファイルからシンボル名を消し去ったら、どうやってリンク時に名前を
解決するのやら。

520 名前:507 :02/12/09 20:55
>>512
-gオプションはつけてないです.


521 名前:507 :02/12/09 20:56
>>519
なるほど.


522 名前:デフォルトの名無しさん :02/12/09 21:27
>>509
> NFSでファイルサーバ上でコンパイルするため
これがそもそも間違い。コンパイラを動かしてるローカルマシンに
ビルド環境を構築すべし。CVS などのソース管理ツールを使って、
リポジトリはファイルサーバーに置いて共有するようにすれば、
バージョン管理もできて一石二鳥だ。

523 名前:508 :02/12/09 21:32
>>518
イヤ、オイラのはただのお遊びなので・・・
リンク情報とかチョット違うゼって、それだけのお話でございまして・・・
重箱の隅をつついて遊んでるだけでござりますれば・・・


524 名前:507 :02/12/09 21:43
>>522
一般ユーザーなので,ローカルマシンへの書き込み権限は
/tmp/しかないのですが,/(/tmp/)に割り振られている
ディスク容量は何故か13MB程度しかありません.
(ハードディスク全体では4GBあるのに..)

ちなみに使ってるマシンはCOMPAQのalpha系CPUで,
Digital UNIXが入ってます.
システム構築したのは確か,COMPAQの方々だったと思いますので,
なんで13MBにしたのか,というツッコミはしないで下さい.


525 名前:デフォルトの名無しさん :02/12/09 21:49
>>507
何故素直にホームディレクトリを使わないの?
もしホームが一杯なら NFS の方にホームにあるいらなそうなファイル群を移
したらダメなん?

まぁそれがダメなら NFS に直吐きもやむなしですなぁ。


526 名前:507 :02/12/09 21:57
>>522
何故なら,/homeへの書き込み権限が無いからです.


527 名前:デフォルトの名無しさん :02/12/09 22:15
>522
ファイルがローカルか NFS サーバ上かで、コンパイル時間にそれほど差が
出るかねぇ……。ウチは NFS のサーバ上にホームディレクトリ置いてあって、
そこで作業してるけど、それほど困ってないぞ。

>507
ファイルサーバーの性能が足りんか、キャッシュ周りのパラメタチューニングが
イマイチか、ネットワーク混みすぎてるんじゃないのか? どっちにしても gcc
で云々するよりは、ネットワーク管理者捕まえるのが正道と思われ。

528 名前:デフォルトの名無しさん :02/12/09 22:32
つーか/tmpが13Mってかなりヤバくないか?

529 名前:507 :02/12/09 22:32
>>527
NFS上でコンパイルした場合に一番時間がかかるのが,
ldの実行部分なのですが,小さいファイルで
/tmpとNFS上ででldの実行時間を比較すると,
/tmpの方が圧倒的に早かったです.

>ネットワーク管理者捕まえるのが正道と思われ。
ネットワーク管理者に聞いてみることにします.

530 名前:507 :02/12/09 22:33
>>528
でもメモリは2GBあります.
不思議


531 名前:デフォルトの名無しさん :02/12/09 22:41
>>530
メモリは全然関係ないだろ。

532 名前:デフォルトの名無しさん :02/12/09 22:43
>>527
データを 1 バイトくらいでちょこっとずつ読み書きしようとすると、NFS は速度が
ガタ落ちしたと思ったが。

533 名前:507 :02/12/09 22:46
>>531
ハードディスクは逼迫(ひっぱく)してるのに,
メモリは余裕という意味で書きました.
C++と関係なくなってきましたね.


534 名前:507 :02/12/09 22:53
>>532
gccのldはg++のldに対して,NFSでも非常に早かったので,
gccとg++で違うldを使ってるって事でしょうか.
それとも,gccとg++で,ldに渡すデフォルトの
オプションが違うとか?


535 名前:デフォルトの名無しさん :02/12/10 01:24
g++でコンパイルするとcrt0がC++版になる



と嘘を言ってみる

536 名前:Stroustrup FAQ! :02/12/10 19:12
http://www.research.att.com/~bs/bs_faq.html

537 名前:bloom :02/12/10 19:12

http://www.agemasukudasai.com/bloom/

538 名前:デフォルトの名無しさん :02/12/10 20:58
このスレの450ですが・・・http://pc3.2ch.net/test/read.cgi/tech/1018657457/l50
(451のレスは無視してください。コピペミスです)。
実行すると原因不明なエラーが出たので閉じると言われます。
原因がワカリマセンで、困っています。
助けてくだしい・・・c++歴一週間です。
教えて君はむかつくだろうと思いますが、何卒よろしゅうたのんます。

539 名前:デフォルトの名無しさん :02/12/10 21:11
>>538
# 何のコンパイラを使ってるかくらいは書いた方がいいぞ。

多分 int (たぶん4Byte) * 1000000個 = 4MB もローカル変数に
割り当てられなくて死んでいるのだろうから、
 ・static を付ける
 ・グローバルにする
 ・new で動的に確保
のどれかをすれば解決する。

540 名前:538 :02/12/10 21:13
>>539
ありがとうございます。
よくわかりませんが本を読んで勉強してみます。
コンパイラは・・・VC++って書けばいいのかな?
ちなみにintは4バイトです。

541 名前:538 :02/12/10 21:21
>>539
とりあえずint型の変数を全部グローバルに定義したら
計算はしてくれました!!!(速度はVBよりも遅かったですが・・・)。
ありがとうございます!!!更に勉強する気になった!!!

542 名前:デフォルトの名無しさん :02/12/10 21:22
>>538
バグとは関係ないところでいろいろあるが
>for(j=2*i;j<=l;j++){
>if(j%i==0){
>p[j]=0;
これはないだろ。そんなわけでちょっとかえてみた

#include <iostream>
#include <fstream>
#include <cmath>
const max=10001 ;
main() {
bool p[max];
int k=int(std::sqrt((double)max));
std::ofstream fout("素数.txt");
for(int i=2;i<max;i++) p[i]=true ;
for(int i=2;i<=k;i++) if(p[i]) for(int j=2*i;j<max;j+=i) p[j]=false ;
int c=0 ;
for(int i=2;i<max;i++) if(p[i]){
fout << i << '\n';
c++ ;
}
std::cout << "素数は全部で" << c << "個です" << '\n';
fout.close();
}

543 名前:デフォルトの名無しさん :02/12/10 21:41
> 速度はVBよりも遅かった

・・・一体何をしたらそんな事になるの?

544 名前:デフォルトの名無しさん :02/12/10 21:59
> 速度はVBよりも遅かった
ワロタ

545 名前:デフォルトの名無しさん :02/12/10 23:32
ヽ(・∀・)ノ
VB>>>>>>>>>>>>>>>>>>>>>>>>>>VC

546 名前:538 :02/12/10 23:57
>>542
速い!!!
それだ同じアルゴリズムなのにしこたま速い!!!
驚いた!!!これがCの凄さの一つか!!!
>>545
うんこ

547 名前:デフォルトの名無しさん :02/12/11 00:35
>>546
うんこはおまいのソースコード

↓これを解説してくれよ
> 速度はVBよりも遅かった

548 名前:デフォルトの名無しさん :02/12/11 00:43
>>546
素数を求めるのでしたら、エラトステネスの篩という方法を
試してみては?

549 名前:デフォルトの名無しさん :02/12/11 00:44
>>548
ええ。それをしているのですが。

550 名前:548 :02/12/11 00:47
>>549
失礼!ソース読んでなかった。

551 名前:デフォルトの名無しさん :02/12/11 01:38
(´-`).。oO(タイトルのC++って一体・・・)

552 名前:デフォルトの名無しさん :02/12/11 01:59
何が問題?

553 名前:デフォルトの名無しさん :02/12/11 02:04
例えばstd::bitsetとか使え。

554 名前:デフォルトの名無しさん :02/12/11 02:27
(´-`).。oO(std::bitset使わなければC++ではないと。。。)

555 名前:デフォルトの名無しさん :02/12/11 02:29
素数格納するのに、bitset と set ではどっちが効率いいんだ?

556 名前:デフォルトの名無しさん :02/12/11 03:22
(´-`).。oO(変なのが来たな。。。)

557 名前:デフォルトの名無しさん :02/12/11 03:54
(´-`).。oO(何か粘着君が一人居て嫌だな。。。)

558 名前:デフォルトの名無しさん :02/12/11 04:16
>551-557
( ´д)ヒソ(´д`)ヒソ(д` )

559 名前:引き篭もり :02/12/11 14:27
あらやだあの人引き篭もりじゃないの?

( ´д)ヒソ(´д`)ヒソ(д` )  ほんとよね

     最近は変な人増えたものねぇ。

560 名前:デフォルトの名無しさん :02/12/11 18:45
std::valarrayでMatrix計算はできますか?

561 名前:デフォルトの名無しさん :02/12/11 19:01
>>560
出来ますけど面倒です。std::valarrayは一次元配列に最適化されています
ので、二次元以上の配列を扱うのが下手です。

二次元配列と見なしてアクセスするにはstd::slice、二次元以上の配列には
std::gsliceをstd::valarrayに適用すればよいが、面倒。

562 名前:560 :02/12/11 19:08
m(_ _)mサンクスです。


563 名前:デフォルトの名無しさん :02/12/11 20:18
標準C++のstd::valarrayは糞だから、Blitzでも使えばどう?
http://www.oonumerics.org/blitz/download/

564 名前:デフォルトの名無しさん :02/12/11 21:16
カンマ演算子のオーバーロードなんて初めて見たよ・・・

565 名前:デフォルトの名無しさん :02/12/11 21:27
>>564
ちょっと思いつかないんだが、どういう風に使われてる?

566 名前:564ではないが :02/12/11 21:39
>>565
行列の値設定
 m =
  1, 2, 3,
  4, 5, 6,
  7, 8, 9;
とか。

567 名前:デフォルトの名無しさん :02/12/11 21:42
プロトタイプはどう書くの?
組み込み型のオーバーロードってできないんじゃ?

568 名前:デフォルトの名無しさん :02/12/11 21:53
class array;があるとして
array &array::operator=(int);
array &array::operator,(int);
みたいになってるから組み込み型は関係ない

569 名前:デフォルトの名無しさん :02/12/11 21:54
>>567
たぶん、カンマ演算子は = より優先順位が低いので
a = b, c は (a = (b , c)) でなくて ((a = b) , c) と解釈される
ことを忘れていると思われ。

570 名前:デフォルトの名無しさん :02/12/11 21:55
ああ、そういう事か。理解した。

571 名前:デフォルトの名無しさん :02/12/11 22:51
>>567
> 組み込み型のオーバーロードってできないんじゃ?
話題とは関係ないけど、逆にこれを利用して組み込み型と
ユーザ定義型を見分けるtemplateってのを見つけたよ。
かなりトリッキーだけど。

572 名前:デフォルトの名無しさん :02/12/11 23:32
>566
久しぶりに C++ の深淵を覗いたような……

(落とし穴にはしょちゅうハマってるが)

573 名前:デフォルトの名無しさん :02/12/11 23:32
>566
久しぶりに C++ の深淵を覗いたような……

(落とし穴にはしょちゅうハマってるが)

574 名前:デフォルトの名無しさん :02/12/11 23:33
>572,573
aboneユーザでつか?

575 名前:デフォルトの名無しさん :02/12/11 23:48
C++で、データを壊さずに配列の動的割り当てのサイズ変更は
どのようにするのでしょうか?

VBでいうと、
Dim a()
Redim a(10)
Redim Preserve a(20)
Redim Preserve a(5)
みたいな処理をしたいのですが・・・




576 名前:572=573 :02/12/11 23:48
>574
そうです。多重カキコごめん。

577 名前:デフォルトの名無しさん :02/12/11 23:56
>>575
特にないので、新しく新規サイズで new[] して、そこに古いデータを
コピーして、古い領域は delete[] する。
配列用のコピー・コンストラクタを作っておくと便利。
std::vector なら resize() メンバ関数を使おう。

578 名前:デフォルトの名無しさん :02/12/11 23:57
>配列用のコピー・コンストラクタを作っておくと便利。

意味不明だった。この行はなかったことにしてほしい。


579 名前:デフォルトの名無しさん :02/12/11 23:59
すんません・・・。
VB厨なんですが、C++を勉強してまして、質問させてください。
VBだと配列をとりあえず
Dim a() as long
と定義しておいて、後で値を確保しつつ配列の長さを変えることの出来る宣言
ReDim Preserve a (10) as long
ってのがあります。
これと同等なことがC++でできないものでしょうか・・・。


580 名前:デフォルトの名無しさん :02/12/12 00:02
>>579
new[]はdelete[]とペアにして使うために、ヒープ領域に配列の大きさを覚えて
おくようになっているので、Cのrealloc()のような事は無理。

新たにnew[]して、転送するしかなかろう。それから、new[]したらデフォルトコンスト
ラクタが呼び出されてしまうので、この事が動作に悪影響を及ぼさないように注意
を払う必要がある。

581 名前:579 :02/12/12 00:07
>>580
へ?

582 名前:579 :02/12/12 00:08
あ、575が同じ質問してたのか・・・すみませんでした。
逝って来ます。

583 名前:デフォルトの名無しさん :02/12/12 00:08
#include <vector>

C++だととりあえず
std::vector<long> a;
と定義しておいて、後で値を確保しつつ長さを買える
a.resize(10);
とすると良い。

584 名前:575 :02/12/12 00:08
>>577
やはりコピーしかないのですね。
VBも何気に見えないところでコピーしてるのかな。
ありがと!


585 名前:デフォルトの名無しさん :02/12/12 00:09
>>579
組み込みの配列じゃなくて、std::vector をつかえ

586 名前:デフォルトの名無しさん :02/12/12 00:09
>>579
組み込みの配列じゃなくて、std::vector をつかえ

587 名前:デフォルトの名無しさん :02/12/12 00:52
C++ は何でキーワード renew を用意しなかったんだろう・・・。

588 名前:デフォルトの名無しさん :02/12/12 01:04
>587
C++ では配列は見捨てられた存在ですから。おとなしく vector 使いましょう。

589 名前:デフォルトの名無しさん :02/12/12 01:04
>587
C++ では配列は見捨てられた存在ですから。おとなしく vector 使いましょう。

590 名前:デフォルトの名無しさん :02/12/12 01:12
キーワード renew はないが、renew と呼ぶにふさわしいものはある。
それは placement new だ。

591 名前:デフォルトの名無しさん :02/12/12 01:13
なんかエコーがかかってるスレだな

592 名前:デフォルトの名無しさん :02/12/12 01:17
Abone使いがいると見える。

593 名前:デフォルトの名無しさん :02/12/12 01:21
なるほど、placement newの方がいいかもしれない。

delete[]するとデストラクタが呼び出されてしまうので、転送した後これが動くと
妙な事になる恐れがある。

そこへ行くとplacement newした領域をdeleteしても自動的にはデストラクタを
呼び出さないのでいいかも。

594 名前:デフォルトの名無しさん :02/12/12 01:24
>>587
初期のC++には例外が無く、newは0(NULL)を返すことで
エラーを表現できたが、renewは…

595 名前:デフォルトの名無しさん :02/12/12 03:39
>>588
。・゚・(ノД`)・゚・。

>>591
その領域の確保には malloc() とか使うの?
あと配列を縮めたい時、どうやってデストラクタ呼ぶの?
renew には、要素が増えた時その分だけのコンストラクタを呼び、要素が減った時には
その分だけのデストラクタを呼び、領域確保は基本的に自動である事を期待したい。
・・・それって結局 vector と似てるけどさ。

>>594
そうか、そういう問題があったのか・・・。

596 名前:595 :02/12/12 05:12
間違えてる。
>591 は 590 宛て。

597 名前:デフォルトの名無しさん :02/12/12 08:27
>>595
> あと配列を縮めたい時、どうやってデストラクタ呼ぶの?
どうやってって、普通に呼べばよいのでは。

598 名前:デフォルトの名無しさん :02/12/12 09:18
1 コずつか?

599 名前:デフォルトの名無しさん :02/12/12 10:14
y'=x+y, y(0)=1のとき、2段法(k=2)のアダムス・バッシュフォース法を用いてy(1)を求めよ。
なお、hの値と2つめの初期値は、
・h = 0.5, y(0.5) = 1.7974425414
・h = 0.1, y(0.1) = 1.1103418362
・h = 0.05, y(0.05) = 1.0525421928
・h = 0.01, y(0.01) = 1.0101003342
・h = 0.005, y(0.005) = 1.0050250417
・h = 0.001, y(0.001) = 1.0010010003
についてそれぞれ計算すること。
プログラム。
各hについての計算結果と誤差。  
計算方法がわかりませんどなたか教えていただけませんか

600 名前:デフォルトの名無しさん :02/12/12 10:48
  ∧_∧∩
( ´∀`)/
___∧__________
先生、質問です。
物凄い初歩的な質問ですみません。ランダムに0から9999
の整数を、(理論的に)等確率で出したいのですが、

for(k=1;k<10000;k++){
(int)i=10000*(float)rand()/(int)RAND_MAX;
}

これでは、(その範囲のものは)出ませんよね。どうしたらよいのでしょうか?

601 名前:デフォルトの名無しさん :02/12/12 11:09
AA がズレているので失格

602 名前:デフォルトの名無しさん :02/12/12 11:12
>>600
0〜RAND_MAXまでは、(RAND_MAX+1)個の要素があるので、
(RAND_MAX+1)で割るのがよろしいかと。

603 名前:デフォルトの名無しさん :02/12/12 11:36
  ∧_∧∩
  ( ´∀`)/
___∧__________
>>600
先生、早速ありがとうございます。これから、がんがって、
勉強します。
>>601
(´・ω・`)

604 名前:デフォルトの名無しさん :02/12/12 11:43
  ∧_∧∩
  ( ´Д`)/
___∧__________
>>602
先生、間違えて、自分にお礼してしまいました。
勉強しても、こういう間違いは直りませんか?

605 名前:590 :02/12/12 12:10
>>595
いや、renew っていう言葉の意味を考えると VB の ReDim のようなものは
ふさわしくないって言いたかったんだけどな。

っていうか、どう考えても std::vector か、その模倣品しか考えられんから
素直にあきらめた方がいい。

606 名前:デフォルトの名無しさん :02/12/12 13:27
昔からヴァカは氏ななきゃ治らない、と申します。

607 名前:デフォルトの名無しさん :02/12/12 13:57
>>600
徐々にC++のキャストについても知りましょう。

608 名前:デフォルトの名無しさん :02/12/12 15:07
template <class T>
void redim(T *array, unsigned long arraySize, unsigned long newSize)
{
  unsigned long copySize = (arraySize > newSize) ? newSize : arraySize;
  T *newArray = new T[newSize];
  std::memcpy(array, newArray, copySize);
  delete[] array;
  array = new T[newSize];
  std::memcpy(newArray, array, newSize);
  delete[] newArray;
}

でいいんでは。VB でも内部的に似たようなことをしているんじゃ?
コンパイルしていないんで動作確認はしてないけど。

unsigned long oldSize = 10;
int *a = new int[size];
unsigned long newSize = 3 でも 20 でも;
redim(a, oldSize, newSize);
で VB と等価かと。


609 名前:デフォルトの名無しさん :02/12/12 15:11
あ、std::memcpy の引数が逆だ。
正しくは、それぞれ

std::memcpy(newArray, array, copySize);
std::memcpy(array, newArray, newSize);


610 名前:exclusiver :02/12/12 15:50
C++ must be supreme language!
so, I believe firmly it!

611 名前:gourmet :02/12/12 18:28
C++ must be chou-creme language!
so, I believe delicious it!


612 名前:デフォルトの名無しさん :02/12/12 19:59
>>600
int a[10000];
for(int i=0;i<10000;++i){ a[i]=i; }
std::random_shuffle(&a[0], &a[10000]);
これで a の中身を順番に使えば等確率だけど、どう

613 名前:デフォルトの名無しさん :02/12/13 00:55
以下の設計について教えてください。
template <typename X> class AAA {
private:
X mem1;
};
があった時、
class BBB {
private:
AAA<case1> mem1;
public:
};
class CCC {
private:
AAA<case1> mem1;
AAA<case2> mem2;
};
等のように、AAA をメンバ変数と持つようなクラスを設計したいのですが、変数の数が固定されていません。
どのように設計するのが一番スマートなのでしょうか?思いついたのは、AAAの基底クラスを作って、
BBBでvector<AAA_BASE> *mem として、BBBを定義してから、vector<AAA> mem(2)等 のポインタをBBBに渡す
事なのですが。もっとスマートに出来ないでしょうか?


614 名前:デフォルトの名無しさん :02/12/13 02:19
Win32SDK のようにキャストがボロボロでるプログラムでも C++ キャストを
使わなきゃいけないかい?
むしろ可読性下がると思うんだけど。

615 名前:デフォルトの名無しさん :02/12/13 02:21
> AAA<case1> mem1;
> AAA<case2> mem2;

これがどうして必要なのか知りたいけど。

616 名前:デフォルトの名無しさん :02/12/13 08:28
>>614
ボロボロと言っても、実際キャストが必須なのって
GDIオブジェクトのHANDLEと、メッセージ系のLPARAMと
コールバックパラメータのvoid*からの取り出し、
ぐらいでない?最初のは普通C++のクラスでラップするし、
二番目はreinterpret_castした方がわかりやすくていいし、
三番目もstatic_castって書いた方が読みやすいと思う。

あとconst_castが大量に必要になるが、
あれを他のキャストで表現すると余計冗長だし。

617 名前:デフォルトの名無しさん :02/12/13 08:39
>>616
const_castなんかどこで使うの?

618 名前:デフォルトの名無しさん :02/12/13 09:32
>614
C++ を使ってるのに SDK 直ってのが考えにくいが。だいたい ATL::CWindowImpl
なり何なりのフレームワークを一枚かぶせるでしょ。

C++ キャストに関しては、俺は場合によりケリだなぁ。一行に複数の cast が入る
場合、特に reinterpret_cast + const_cast が必要になる場合とかは、C++ キャス
トだと行が長すぎて却って読みにくくなるから C スタイルキャストで済ませる。

619 名前:デフォルトの名無しさん :02/12/13 09:43
static_cast<T>(x) って書くのが長いからって
T(x) と書くのは OK?

620 名前:デフォルトの名無しさん :02/12/13 12:19
どこかに整数演算だけで浮動小数点演算をエミュレートしてる C か C++ の
ソースとか落ちてないでしょうか(勉強用)。

621 名前:620 :02/12/13 12:32
ごめんなさい、検索キーワード工夫すれば見つかるもんですね。
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=IEEE+754+&lr=lang_ja

http://www.octave.org/

622 名前:デフォルトの名無しさん :02/12/13 13:17
>>618

APIを直で叩くケースが少ないBCBな俺の場合、
旧式キャストは一切使わないなぁ。
可読性も大切だけどコンパイルエラーのほうがもっと大切。

つーかキャストって思ったほど使ってないなぁ。
フォーム2つにつき1回つかう位のペース。
ちなみに手持ちのプログラムで一番大きなものにgrepかけてみたらこんな感じ。

static_cast 3個
dynamic_cast 11個
reinterpret_cast 3個
const_cast 0個
組み合わせたものは0個

おりょ、const_castを一番使っていると思っていたのに我ながら意外な結果が…。

623 名前:デフォルトの名無しさん :02/12/13 13:24
>>613
何をやりたいのかわからないけれど、そのコードは明らかに異常。
何か根本的に間違っていると思われます。
まずは何をしたいのか、どうしてそのコードが必要になったのか、書いてみそ。

624 名前:デフォルトの名無しさん :02/12/13 13:30
> const_cast 0個
> おりょ、const_castを一番使っていると思っていたのに

ちょとワラタ

625 名前:デフォルトの名無しさん :02/12/13 15:57
つーか、わざわざ4つも予約語増やしてキャスト導入した意味ねえだろが。
アフォか。

626 名前:デフォルトの名無しさん :02/12/13 16:13
>>625
ネタですか?
それともアフォですか?

627 名前:デフォルトの名無しさん :02/12/13 16:22
>>625
gotoがあればbreakなんかいらん、と言っているに等しい発言だな。

628 名前:デフォルトの名無しさん :02/12/13 17:22
んー?
625 は、「わざわざ 4 つも予約語増やしたんだからちゃんと使え」 という意味か?

629 名前:625 :02/12/13 18:13
>>626
意味不明。

>>627
意味不明。

>>628
それに近いな。

630 名前:626=628 :02/12/13 18:16
>>629
単純に 「4 つも予約語増やして導入した意味なんかない」 という風に取れたんだが。

631 名前:デフォルトの名無しさん :02/12/13 18:18
VC6でSTLportを使うときにあるシンボルを定義していると,
cmath等のインクルード時にC標準ライブラリをstd名前空間に
押し込んでくれたように記憶しているのですがどなたかご存知ありませんか。
ドキュメントやstl_user_config.h,_site_config.h等調べてみたのですが
一向にわかりません。

632 名前:デフォルトの名無しさん :02/12/13 18:20
template 統合スレのネタだな。
スレ違い。

633 名前:デフォルトの名無しさん :02/12/13 18:27
>>630
察するにあなたは関東の人じゃないな

634 名前:625 :02/12/13 18:27
>>630
そうか。スマソ (ノД゚)
引き篭もりなんで許してくれ。

635 名前:デフォルトの名無しさん :02/12/13 18:28
>>632
申し訳ありませんでした。そちらに行ってみます。

636 名前:630 :02/12/13 18:30
>>633
生まれも育ちも東京都江戸川区ですが何か?

637 名前:デフォルトの名無しさん :02/12/13 21:06
インラインが淫乱を連想させて困るのですが何とかなりませんか?

638 名前:デフォルトの名無しさん :02/12/13 21:11
もっと乱rていxhgkい

639 名前:デフォルトの名無しさん :02/12/13 21:23
回答は日本語でお願いします。

640 名前:デフォルトの名無しさん :02/12/14 14:54
I love to play C++ programming!

641 名前:613 :02/12/15 02:21
長文ですんません。株式売買のシミュレーションっぽい事を行いたいのです。
class 内部自由度1 {};
...
class 内部自由度N1 {};

class トレーダー1{};
...
class トレーダーN2{};

class 全体{};

void func(全体*){}

で内部自由度がN1個あって、N2人のトレーダーが個性を持って、1...N1の内部自由度を適当に持つとします。
N2人のトレーダーが全体クラスに集まって、互いに影響を受けながら関数funcでやり取りを行いたいのです。
トレーダーが持つ内部自由度の個数が色々変わるのでどうしようかと悩んでいます。トレーダークラスに基底クラス(vector<基底内部自由度>持ち)
を作って、継承させてコンストラクタの書き方を変える事でトレーダークラスを作るのがいいかな?と思ったのです。
最終的には、全体クラスにトレーダー以外の人間も入れたいのです。設計がダメダメなのでしょうか?

642 名前:デフォルトの名無しさん :02/12/15 02:37
>641
> 設計がダメダメなのでしょうか?
はい。

643 名前:613 :02/12/15 03:06
そうですか。もう少し考えてみます。

644 名前:デフォルトの名無しさん :02/12/15 03:15
自律行動するロボットのシミュレータと似てる?

645 名前:613 :02/12/15 04:04
そちらの事は知りませんが、異なる内部自由度を持った複数の関節が互いに協調し合って
歩行を実現するシステムなら似ていると思います。


646 名前:デフォルトの名無しさん :02/12/15 11:15
独自にクラス作るのが意外と大変なんで
STLか何か使って簡単にプロパティ型出来ませんか?

647 名前:デフォルトの名無しさん :02/12/15 11:23
>>646
(゚Д゚) ハァ?

648 名前:デフォルトの名無しさん :02/12/15 11:32
>>646
プロパティ型って何?教えて君でスマソ。

649 名前:デフォルトの名無しさん :02/12/15 11:32
こんな感じの奴です。
struct A
{
 int param1, param2;
public:
 class prop
 {
  A& ref;
 public:
  Prop(A& a) : ref(a){}
  int operator = (int s){ return ref.param1 = s > 0 ? s : 0; }
  operator int (int s){ return ref.param1; }
 }Prarameter1;
 ・・・Prarameter2;
};
Get、Setを一つにまとめてシンプルにしたいので。

650 名前:646 :02/12/15 11:48
>>649は間違いだらけですが、
ようはSetPrarameter1、SetPrarameter1の動作をまとめて
obj.Prarameter1 = -1;
count << ob.Prarameter1 << endl;
見たいな使い方が出来るようにしたいのです。

651 名前:デフォルトの名無しさん :02/12/15 11:51
>646
Cプリプロセッサを使え

652 名前:646 :02/12/15 12:04
>>651
調べました。__declspec(property)ですね?
ありがとうございまし。

653 名前:デフォルトの名無しさん :02/12/15 12:58
reference counter!

654 名前:デフォルトの名無しさん :02/12/15 18:23
>>651
C++ では、インクルード・ガード以外、マクロは極力使わないこと。
定数の定義やマクロ関数の定義等はもってのほか。

>>652
__declspec(property) って C++ 言語じゃないんですけど。
やるなら、

  TSomeType& Parameter();

というメンバ関数にする。

655 名前:デフォルトの名無しさん :02/12/15 20:57
>>654
是非マイクロソフトさんにも言ってあげてください。

656 名前:デフォルトの名無しさん :02/12/16 01:36
>654
> TSomeType& Parameter();
それだと問題が全く解決しないと思うが…。プロパティ化したいメンバ変数が一つなら
良いけど、複数あったら NG だよね。

現実的な解としては、マクロ使うのが比較的マシな回答だと思う。他に Loki の Tuple
を使うって手もあるが、あまりお奨めはせん。

657 名前:デフォルトの名無しさん :02/12/16 02:12
こんなんどうよ。

// property.h
template<class T, class O, T O::*M>
class property {
  O &obj;
 public:
  property(O &o) : obj(o) {}
  property& operator=(const T& x) {obj.*M = x; return *this;}
  operator const T&() const {return obj.*M;}
  operator T&() {return obj.*M;}
};


658 名前:デフォルトの名無しさん :02/12/16 02:12
// proptest.c
#include <iostream>
#include "property.h"

class foo
{
  int a;
 public:
  property<int, foo, &foo::a> x;
  foo() : a(0), x(*this) {};
  friend ostream& operator<<(ostream &os, const foo &f) {
    return os << "foo<" << f.x << ">";
  }
};

int main()
{
  foo f;
  cout << f << endl;
  f.x = 10;
  cout << f << endl;
}


659 名前:デフォルトの名無しさん :02/12/16 02:22
>>658
それ漏れも考えて書こうと思ったけどやめた。

値の範囲チェックとかどうすんのよ?

660 名前:デフォルトの名無しさん :02/12/16 02:25
>>657
しかもそれだけでいいのなら
template<class T>
class property {
  T obj;
 public:
  property() : obj(T()) {}
  property& operator=(const T& x) {obj = x; return *this;}
  operator const T&() const {return obj;}
  operator T&() {return obj;}
};
でいいんじゃないか?

661 名前:デフォルトの名無しさん :02/12/16 02:29
>>659
これじゃダメ?

class foo
{
  int a;
  class prop1 : public property<int, foo, &foo::a> {
    typedef property<int, foo, &foo::a> super;
    prop1& operator=(int s) { if (s < 0) s = 0; super::operator=(x); return *this;}
  };
  prop1 x;
}


662 名前:デフォルトの名無しさん :02/12/16 02:34
>>660
だな。


663 名前:デフォルトの名無しさん :02/12/16 08:22
>>660
それだけでいいのなら
property<T> の代わりに T でいいんじゃないか?

#include <boost/bind.hpp>
#include <boost/function.hpp>

template<typename T>
class property {
 boost::function<T> getterFunc;
 boost::function<void, const T&> setterFunc;
public:
 template<typename Owner, typename G>
 property( Owner& p, G g )
  : getterFunc( boost::bind( g, p ) ) {}
 template<typename Owner, typename G, typename S>
 property( Owner& p, G g, S s )
  : getterFunc( boost::bind( g, p ) )
  , setterFunc( boost::bind( s, p, _1 ) ) {}
public:
 operator T() const { return getterFunc(); }
 property& operator=( const T& rhs ) {
  setterFunc( rhs ); return *this;
 }
};

664 名前:デフォルトの名無しさん :02/12/16 08:55
>>663
思いっきりテンプレートに見えるのは、気のせいか?

665 名前:デフォルトの名無しさん :02/12/16 10:59
setX, getX でいいでしょ
なんでわざわざそんな不要なコード書きたがるかね

666 名前:デフォルトの名無しさん :02/12/16 11:50
>>665
私はいろいろやって(C++でのプロパティを)諦めた人なので
> setX, getX でいいでしょ
は同意だけど

> なんでわざわざそんな不要なコード書きたがるかね
これ、コボラーの発想だよ。
いいものがあればそれを求める。それが ぷらぷら使いさ。

667 名前:デフォルトの名無しさん :02/12/16 12:49
virtual void* Create()=0;

この、末尾の「=0」ってどういう意味? 

668 名前:デフォルトの名無しさん :02/12/16 12:58
>>667
pure virtual function・・・・・・

669 名前:デフォルトの名無しさん :02/12/16 13:15
ヘッダファイル(拡張子が .h)のファイルの中で、こんな一行が

 class ISerialize;

ソースの後の方で、ちゃんと

class ISerialize {
public:
..

}

というように、定義されているのですが、最初の方で 「class ISerialize; 」と書く意味がわかりません。

どういう意図があるのでしょう。
これは省略できるのですか。


670 名前:デフォルトの名無しさん :02/12/16 13:23
> class ISerialize;
ここから

>class ISerialize {
>public:
>}
までの間で
ISerialize *p ;
とかやったりするため

671 名前:デフォルトの名無しさん :02/12/16 13:25
Do you know declaration of class?

672 名前:デフォルトの名無しさん :02/12/16 13:41
class ISerialize;

class Test {
class ISerialize& is;
};

class ISerialize {
public:
..

}

673 名前:デフォルトの名無しさん :02/12/16 13:45
>>672
class ISerialize;

class Test {
class ISerialize& is;
};

class ISerialize {
public:
Test *t; //ここがなけりゃ意味ないだろ?
}



674 名前:デフォルトの名無しさん :02/12/16 13:54
>>673
そうだったスマソ

675 名前:デフォルトの名無しさん :02/12/16 14:17
海外サイトで通用しなかった英語を
避難先の日本語サイトでひけらかして何になる? (water

676 名前:デフォルトの名無しさん :02/12/16 14:18
>>673
>Test *t;
は参照よりも実体のほうが趣旨に合うと思うが

677 名前:デフォルトの名無しさん :02/12/16 14:26
 virtual int GetType() const = 0;

これはつまり、サブクラスは必ず GetType() で値を返して、しかも、そのサブクラスのサブクラスでは、GetType() をオーバライドできない、ということでしょうか。


678 名前:671 :02/12/16 14:27
>>675
うるせー犯すぞ

679 名前:デフォルトの名無しさん :02/12/16 14:30
>>677
Effective C++をどうぞ。

680 名前:デフォルトの名無しさん :02/12/16 15:07
>>677
サブクラスって意味知ってる?

まあそれはそれとして、純粋仮想関数を一つでもメンバとして持っているクラスは
抽象クラスとなり、インスタンスは作成できない。
かならず継承して、純粋仮想関数をすべてオーバーライドして初めてインスタンス
を作成できるようになる。

681 名前:デフォルトの名無しさん :02/12/16 15:11
>>9999

682 名前:デフォルトの名無しさん :02/12/16 15:13
>>677
こんな物だと思いたまへ。

class A {
protected:
int i;
int j;
public:
virtual int f() = 0;
int g() { return j; }
};

class B : public A {
public:
int f() { return i; }
};

int main()
{
// A a; // インスタンスは作成できない
B b;
b.f();
b.g();
}

683 名前:デフォルトの名無しさん :02/12/16 15:17
純粋仮想関数のメリットって何ですか?

684 名前:デフォルトの名無しさん :02/12/16 15:26
>>683
インターフェースと実装を切り離す時に便利。入出力関数が決まっていて、
実装にバリエーションがある時、インターフェース部だけを抽象クラスにして
おいて、一種のテンプレートのようにして使う。

685 名前:デフォルトの名無しさん :02/12/16 15:28
ところでこの板、連続書き込みが規制されてない?
今は串を変えて書いてるけど、プロキシ使ってる人は、まとめて規制食らっ
ちゃうよ。

686 名前:683 :02/12/16 15:29
>>684
ありがとうございます。よく分かりました。

687 名前:デフォルトの名無しさん :02/12/16 15:31
void penis_fumble(){ (;´Д`)ハァハァ; }

688 名前:デフォルトの名無しさん :02/12/16 15:38
gotcha!

689 名前:デフォルトの名無しさん :02/12/16 15:55
>>683
メンバ関数のグループ化と規格化
「○○対応をうたうクラスにはこんな関数セットを用意すること」

690 名前:デフォルトの名無しさん :02/12/16 17:52
class A
{
};

class B : public A
{

};

というのがあり、

A* boo(A* obj);

という関数なら、クラスAクラスBのどちらのオブジェクトもとれるのは分かるのですが、

A& boo(A& obj);

なら、Aしか引数,戻り値にすることはできませんか?

691 名前:デフォルトの名無しさん :02/12/16 17:58
やってみりゃいいだろ

B b;

A& boo(A& obj)
{
return b;
}

main()
{
boo(b);
}


692 名前:デフォルトの名無しさん :02/12/16 17:58
>>690
Bもできます
自分で試すきないの?

693 名前:690 :02/12/16 18:15
すいません。聞きたかったことを間違えました。

A boo(A& obj)
{
B b = new B();
return b;
}

という場合に、bを返したら、どうなりますか?
外で

B b = (B)boo(obj);

みたいなのはできないんでしょうか?

694 名前:デフォルトの名無しさん :02/12/16 18:17
return *b;

695 名前:デフォルトの名無しさん :02/12/16 19:58
どうでもいいが激しくわかりづらいソースだな。AとかBとか。

696 名前:デフォルトの名無しさん :02/12/16 20:56
>693
実体を基底クラスにキャストするとオブジェクトのスライシング、派生クラス分の
オブジェクトが捨てられて基底クラスに詰め込まれる、が起きる。

ポインタ・参照の場合は(多重継承・仮想継承が絡むと細かいことが色々あるが、
それを忘れれば)何も起こらない。

class Base {};
class Deriv : public Base {}
Base* pb = new Deriv;  // OK

特に Base に仮想関数が定義してある場合、pb 経由で仮想関数を呼び出すと
Deriv の関数が呼ばれる。

class Base { public: virtual void foo(); };
class Deriv { public: virtual void foo(); };
Base* pb = new Deriv;
pb->foo();  // Base::foo() ではなく Deriv::foo() が呼ばれる

逆に基底クラスから派生クラスにキャストするのは、実体の場合には論外。ポインタ・
参照の場合には「実はそのポインタ・参照は派生クラスを指している」という場合に限っ
て OK。そうでない場合には、直後にメモリ領域壊すことになる。

Base* pb = new Deriv;
Drive* pd = static_cast<Deriv*>(pb); // OK

Base* pb = new Base;
Deriv* pd = static_cast<Deriv*>(pb); // コンパイルは通るが、直後に惨状が待ち受けてる

っつか、基本事項だから「プログラミング言語 C++」でも買ってきて読んどけ。一から
十まで説明してたら 1 スレ使っても字数が足りんよ。


697 名前:デフォルトの名無しさん :02/12/16 20:56
>>666
>> なんでわざわざそんな不要なコード書きたがるかね
>これ、コボラーの発想だよ。
 
余計なコードを書かないってのは言語を超えた開発の鉄則。
新規コードは最小限に抑えるべし。
念のために言っておくが、変数・関数名を短くしろとか、
改行を惜しめって意味じゃないからね。
 
無論ひまつぶし等は別だが、その場合はその旨を明記して欲しい。

698 名前:デフォルトの名無しさん :02/12/16 21:03
>>697
一人の人も救えないのに世界を救えるはずがないよな!

699 名前:デフォルトの名無しさん :02/12/16 22:15
>>698
んなこたーない

700 名前:698 :02/12/16 22:25
>>699
知ってる

701 名前:デフォルトの名無しさん :02/12/16 22:31
>>683
言語に純仮想関数の機構(late binding)があると、
オブジェクト指向プログラミングができるようになる。


702 名前:デフォルトの名無しさん :02/12/16 22:32
>>701
・・・・・単なる仮想関数でもそうでしょ?

703 名前:デフォルトの名無しさん :02/12/16 22:46
>>701 >>702
うむ。その通りだ。VBもオブジェクト指向プログラミングはできるのだよ。

704 名前:デフォルトの名無しさん :02/12/16 23:33
>>701-703
それは仮想ではなく妄想ではないかと・・・

705 名前:デフォルトの名無しさん :02/12/16 23:41
>>704
あなたこそ妄想です。

706 名前:デフォルトの名無しさん :02/12/17 00:20
ポリモーフィズムできりゃOOPはできる。
(向き不向き存在価値なしはあるにしても)

707 名前:デフォルトの名無しさん :02/12/17 01:03
「オブジェクト指向=多態」と思い込んでいる馬鹿がいるな

708 名前:デフォルトの名無しさん :02/12/17 06:59
typedef aiueo *kakikukeko;

ってのがよく分かりません。

typedef aiueo* kakikukeko;

のことですか?

709 名前:デフォルトの名無しさん :02/12/17 09:06
ソーデース

710 名前:デフォルトの名無しさん :02/12/17 11:23
>>703
そらそーだ
ただ、金属バットで家建てようとしているようなもんだけどな


711 名前:デフォルトの名無しさん :02/12/17 11:30
//文字列でNULLがないときってやばくない?
struct OOO
{
char c[4];
char j;
};
#include<iostream>
#include<string>
#define print(x) std::cout << (x) <<std::endl;
int main()
{
OOO nn = {'3','3','3','3',22};
print( sizeof( nn.c ) );//4
print( strlen( nn.c ) );//11
std::string BadStr= nn.c;
print( BadStr );//3333???????
std::string TrueStr = BadStr.substr(0,(strlen(nn.c) > sizeof(nn.c) ? sizeof(nn.c) : strlen(nn.c)));
print( TrueStr );//3333
}

712 名前:デフォルトの名無しさん :02/12/17 11:32
>>708
kakukikeko は aiueo へのポインタってこと。
aiueo を *kakikukeko であらわせるなら、
&aiueo は kakikukeko でしょ?

aiueo a;
kakukikeko k;
k = &a;

713 名前:デフォルトの名無しさん :02/12/17 11:33
>>711
当たり前だろ。

714 名前:666 :02/12/17 12:58
>>697
> 余計なコードを書かないってのは言語を超えた開発の鉄則。

    ま た Y A G N I か


715 名前:デフォルトの名無しさん :02/12/17 15:29
クラスローカルな定数って定義できます?
class MyClass{
 const int err = 1;
}
はできませんでした。

716 名前:デフォルトの名無しさん :02/12/17 15:45
>>715
こういうのはどう鐘。

class MyClass{
 static const int err;
}
const int MyClass::err = 1;


717 名前:デフォルトの名無しさん :02/12/17 15:52
>>715
enum使っとけ。

718 名前:デフォルトの名無しさん :02/12/17 15:59
class MyClass{
 static const int err = 1;
}
なら可能(整数だけだが)。できないコンパイラはヘタレ。

719 名前:デフォルトの名無しさん :02/12/17 16:02
>>714
つまり、度々無駄なコードを書いては先輩や上司から叱責されていると?


720 名前:デフォルトの名無しさん :02/12/17 17:31
>>715
確かにえなーむが妥当

721 名前:デフォルトの名無しさん :02/12/17 19:20
class MyClass{
 const int err;
}

MyClass::MyClass() : err(1) {
}

722 名前:デフォルトの名無しさん :02/12/17 23:35
セミコロンを忘れずに・・・

723 名前:721 :02/12/18 00:57
>>722
正直、すまんかった。
浮気性なもんでJava子や#子の癖が出るんでね。

class MyClass{
 const int err;
};

MyClass:MyClass() : err(1){
}

724 名前:デフォルトの名無しさん :02/12/18 08:47
>>723
こんどはコロンが一つ…

725 名前:デフォルトの名無しさん :02/12/18 10:35
コンロも一つ

726 名前:デフォルトの名無しさん :02/12/18 10:53
蝉を退治する殺虫剤で「セミコロン」とか作ったら面白いよね。

727 名前:デフォルトの名無しさん :02/12/18 10:58
(゚Д゚)ハァ?

728 名前:328 :02/12/18 11:12
>>726
オレはオマエのほうが面白いと思うがどうか。

729 名前:デフォルトの名無しさん :02/12/18 11:14
328 は意味不明だが、728 には同意

730 名前:デフォルトの名無しさん :02/12/18 13:46
随分と突飛だな。

731 名前:デフォルトの名無しさん :02/12/18 15:24
>>728
面白いというかおっぱいしゃぶりたいよね。

732 名前:デフォルトの名無しさん :02/12/18 23:17
void* から非void型への変換のキャストって???

733 名前:デフォルトの名無しさん :02/12/19 01:18
???

734 名前:デフォルトの名無しさん :02/12/19 01:31
>>732
何がいいたいのかサパーリわからん。

template<typename T>
T void_ptr_to_hoge(void* p)
{
 return reinterpret_cast<T>(p);
}

↑でいいのか?

735 名前:デフォルトの名無しさん :02/12/19 10:23
void* は非 void 型だよな

736 名前:デフォルトの名無しさん :02/12/19 15:31
borland C++ 使ってるんですが
マルチスレッド化のやり方がわかりません。
教えてください 頼みます

737 名前:デフォルトの名無しさん :02/12/19 15:53
>>736
WindowsならWin32APIのCreateThreadでいいんじゃない?

738 名前:デフォルトの名無しさん :02/12/19 16:12
猫を呼んで来い

739 名前:デフォルトの名無しさん :02/12/19 16:22
 =⊂(ΦωΦ)⊃

呼んで来ました!

740 名前:デフォルトの名無しさん :02/12/19 16:42
。 猫じゃないものがキタぁぁぁぁ!!
。   ∧_∧。゚
 ゚  (゚ ´Д`゚ )っ゚
  (つ   /  アァァァァ
    |  (⌒)
   し⌒^

741 名前:デフォルトの名無しさん :02/12/19 21:57
>>734
static_castじゃないんか?

742 名前:デフォルトの名無しさん :02/12/19 22:14
static_cast でいいのか?
reinterpret_cast のが妥当だと思うが・・・。

743 名前:デフォルトの名無しさん :02/12/19 22:40
reinterpret_castだよ。

744 名前:デフォルトの名無しさん :02/12/19 22:43
C++で作成したアプリケーションについてですが
Spy++とかで確認することができる
クラス名があるじゃないですか。
あれはバイナリ(exe)にはどんな風にして格納されてるんでしょうか?

やりたいことはメインウィンドウのクラス名を
バイナリエディタで書き換えたいのです。

よろしくおながいします(´・ω・`)

745 名前:デフォルトの名無しさん :02/12/19 22:46
> Spy++とかで確認することができる
> クラス名があるじゃないですか。

・・・え?
もしかして、ウィンドウクラスの事?
ならスレ違いと言っておこう。

746 名前:デフォルトの名無しさん :02/12/19 22:48
>>745
すれ違いでしたか(´-ω-`;)
C++で作られたプログラムということだったので
こちらで質問してしまいました。ごめんなさいです。
もしよかったらどこのスレッドで聞けば
答えてもらえるのかだけでも教えてもらえませんでしょうか。
ほんとすいません・・・。

747 名前:デフォルトの名無しさん :02/12/19 23:10
C++ で作られたプログラムだろうが、C++ の事について訊きたいのでなければ
スレ違い。
妥当なのはぱっと思いつかないけど、近そうなのは Win32API スレ、Windows
Programing スレあたりか。

748 名前:デフォルトの名無しさん :02/12/19 23:33
>>747
ありがとうございますです。
さっそくそちらのほうに尋ねてみたいと思いまつ(´・ω・`)

749 名前:デフォルトの名無しさん :02/12/20 18:54
class Baka
{
friend ostream& operator<<(ostream& os, const Baka& obj);
private:
int aho;
};

として、cppファイルのほうでoperator<<のほうを実装すると、
この関数は、privateにアクセスでききない。と出ます。

クラス宣言の中で、インラインで書いてやると、コンパイル通ります。
コンパイラはVS.NETを使っているのですが、コンパイラの仕様ですか?
何か間違っているのでしょうか?

750 名前:デフォルトの名無しさん :02/12/20 19:00
>>749
classのデフォルトのアクセス権はprivateです。


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