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


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

C++相談室 part34
501 名前:デフォルトの名無しさん :04/08/21 02:23
>>500
「4.9 初期化」

502 名前:474 :04/08/21 02:23
>>498
了解。コンパイラ依存という事で。

>>497,499
実際のコメントは○○文字の初期化、という感じで書いていました。(○○がわかると会社がばれる)
レビュアーの言う通りにmemsetで統一、という事になりそうなので訊いてみた次第です。
たくさんの意見蟻がd。

503 名前:デフォルトの名無しさん :04/08/21 02:27
>>501
P.104〜P.105の
『指定した個数より配列に対する初期値が少なければ、残り要素は外部変数、静的変数および
自動変数については0になる。』
ここかー!ありがとう。ほんとK&Rは隅々まで読んどかないと変なとこで足下掬われるな

504 名前:デフォルトの名無しさん :04/08/21 02:30
あれ、じゃあ = ""; も  = {0}; と同じ扱い?

505 名前:504 :04/08/21 02:32
ちがうか。 "" の先頭アドレスから連続したメモリ領域がコピーされるんかな?

506 名前:デフォルトの名無しさん :04/08/21 02:32
>>498読め。だからおまえはちゃんとROMれよ!

507 名前:デフォルトの名無しさん :04/08/21 02:32
std::fill使えって言う意見が1つだけってのも悲しいなぁ
所詮STLの知名度なんてそんなもんなんですな

508 名前:498=504=505 :04/08/21 02:35
なんです。マジでw。
ちょっと混乱中。

509 名前:474 :04/08/21 02:41
>>507
データ構造関係は、ほぼ使ってますよ。
Boostも使いたかったけど「実績」を証明するのがめんどくさかったので諦めましたが。

>>508
VC6 VC7 mingw gcc にて確認、全部0で埋まりました・・・。

510 名前:デフォルトの名無しさん :04/08/21 02:41
すいません勘違いしました。
={0}と=""は同じです。
どっちも={'\0'}です。

511 名前:デフォルトの名無しさん :04/08/21 02:44
むしろhoge[128]={}で

512 名前:デフォルトの名無しさん :04/08/21 03:00
>>507
なんで既出の意見を何度も繰り返す必要があるよ?


つうかこの場合={0}がstd::fillよかいいだしょ。

513 名前:デフォルトの名無しさん :04/08/21 03:05
>>512
激しく同意。とでも言って欲しかったんじゃないか。
寂しい奴なんだよ。

514 名前:デフォルトの名無しさん :04/08/21 03:39
>>498
コンパイラ依存じゃねーよ
{0}は残りの配列の要素(クラス、構造体のメンバ)も0で埋める。

515 名前:デフォルトの名無しさん :04/08/21 03:44
C++の規格書にもほとんど同じ記述が明記されてますね.
http://www.kuzbass.ru/docs/isocpp/decl.html#dcl.init.aggr
の8.5.1-7-がそれ.

>512,513
すいません.愚痴垂れ流しただけになってました.

516 名前:デフォルトの名無しさん :04/08/21 05:31
メモリプールを作っていて疑問に思ったのですが、

Point* pt = (Point*)new char[sizeof(Point)];
*pt = Point(10, 10);
delete [] pt;

1). 2行目のコードででptのコンストラクタが呼ばれますが、
ptはビット的な変化はあるんでしょうか?

2). ptのアドレスは変わらない様ですがこの行為は正当でしょうか?


517 名前:デフォルトの名無しさん :04/08/21 05:47
>>516
釣れますか?

518 名前:デフォルトの名無しさん :04/08/21 09:03
char* buffer=new char[sizeof(Point)];
Point* pt=new(buffer) Point(10, 10);
pt.~Point();
delete[]buffer;

こういうことがやりたかったんじゃないのかい?

519 名前:デフォルトの名無しさん :04/08/21 09:15
藻前ら、初期化の方法にこだわるのも結構だが、
あまりエレガントな記述を追求しても、
同じデータを再初期化する時に破綻するのがわかってんだから、
大人しく一般的な初期化をしとけ。

memset、ZeroMemory、std::fillで決着。
反論は受け付けない。以上。

520 名前:デフォルトの名無しさん :04/08/21 09:16
>>474
知名度はそんなに高くないから「わかりにくい」という意見には
一理あるかもしれんけど、だからと言ってそこで memset を使う理由にはならない。
オーバーロードは分かりにくいから使用禁止って言うのと同レベルだよ。

521 名前:デフォルトの名無しさん :04/08/21 09:23
>>519
最初期化、それは名高い変数の使いまわしと言うものですか!?

522 名前:デフォルトの名無しさん :04/08/21 10:05
>>521
変数使いまわしも何も、クラスのメンバ変数が思い切り該当するっしょ。

523 名前:デフォルトの名無しさん :04/08/21 10:06
std::fillってコンパイラちゃんと最適化してくれんの?

524 名前:デフォルトの名無しさん :04/08/21 10:06
>>520
まったく同意見
519は論点ずれてるうえ
反論は(ry とわざわざ自爆する奇特なピエロ

525 名前:デフォルトの名無しさん :04/08/21 10:09
>>523
それはやってみるしかない
同じ処理系でも条件次第で違ったりもする
アセンブラ読めない人と、実測できない人は、蚊帳の外

526 名前:デフォルトの名無しさん :04/08/21 15:03
> 大人しく一般的な初期化をしとけ。
> memset、ZeroMemory、std::fillで決着。

これらは一般的な「初期化」ではない。
未初期化のPODに対して行う場合に限定して
「初期化」と呼べるかもしれない、くらいのものだ。

527 名前:デフォルトの名無しさん :04/08/21 15:04
>>522
何に該当するって?

528 名前:デフォルトの名無しさん :04/08/21 15:16
vector::clear

529 名前:デフォルトの名無しさん :04/08/21 15:20
std::stringからchar配列に変換しようとすると、変換できませんとコンパイラが言います。


具体的には、

char hairetu[256];
std::string str = "ぬるぽ";

hairetu = str.c_str();

これでいけると思うのですが・・だめなのでしょうか・・・


530 名前:デフォルトの名無しさん :04/08/21 15:21
strcpy(hairetu, str.c_str());

531 名前:デフォルトの名無しさん :04/08/21 15:21
>>529
ネタ?
配列名には代入できない。strcpyを使え。

532 名前:デフォルトの名無しさん :04/08/21 15:22
>>529
だめです。
char配列を文字列として使うなら、C言語の文字列処理を知るべきです。

533 名前:マイク ◆yrBrqfF1Ew :04/08/21 15:23
>std::string str = "ぬるぽ";
 ↓
>std::string str("ぬるぽ");

534 名前:デフォルトの名無しさん :04/08/21 15:25
いつも思うんだけど、>>529の類ってどう考えてもネタだと思う。
文字列処理なんてどんな入門書にも書いてるし、これ間違えるなんてあり得ない

535 名前:デフォルトの名無しさん :04/08/21 15:34
std::copy(str.c_str(), str.c_str() + str.length() + 1, buf);

536 名前:デフォルトの名無しさん :04/08/21 15:35
std::copy(str.begin(), str.end() + 1, hairetu);

537 名前:デフォルトの名無しさん :04/08/21 15:40
>535, 536

buffer overrun が気になる

538 名前:デフォルトの名無しさん :04/08/21 15:42
>>536 ×

539 名前:>>529 :04/08/21 15:42
どうも、ありがと。

自分C++ラーなので、知りませんでした。
まじで、ネタじゃありませんが(あせ


540 名前:デフォルトの名無しさん :04/08/21 15:46
std::copy(str.begin(), str.end(), hairetu);
henkaku[str.length()] = '\0';

541 名前:540 :04/08/21 15:47
henkaku じゃなくて hairetuだた。

542 名前:デフォルトの名無しさん :04/08/21 15:49
>>540
>>537

543 名前:デフォルトの名無しさん :04/08/21 15:50
C++ならこうだろ。
std::vector<char> hairetu(str.begin(), str.end());
hairetu.push_back('\0');

544 名前:デフォルトの名無しさん :04/08/21 15:53
こっちのが効率がいいかもね。
char const* const c_str = str.c_str();
std::vector<char> hairetu(c_str, c_str + str.length() + 1);

545 名前:デフォルトの名無しさん :04/08/21 15:53
そういうのを見ると、Cを暗号化したものがC++と思えてくるな。

546 名前:mike ◆yrBrqfF1Ew :04/08/21 15:57
>>529
char carray[256];
std::string nullpo("ぬるぽ");
std::istringstream strstrm(nullpo);
strstrm>>setw(sizeof(carray))>>carray;

547 名前:デフォルトの名無しさん :04/08/21 15:59
char *bgn = str.begin();
int len = std::max(str.length(), sizeof(hairetu) - 1);
std::copy(bgn, bgn + len, hairetu);
hairetu[len] = '\0';

548 名前:デフォルトの名無しさん :04/08/21 15:59
minじゃね?

549 名前:デフォルトの名無しさん :04/08/21 16:07
>>533,>>546 頭悪そう。

550 名前:デフォルトの名無しさん :04/08/21 16:12
>>547
勝手に後ろを切り捨てちゃまずいだろ。

char hairetu[256];
if(str.length() >= sizeof(hairetu)) throw std::range_error("長すぎ");
strcpy(hairetu, str.c_str());

551 名前:マイク ◆yrBrqfF1Ew :04/08/21 16:12
2chネラほどじゃないさ。

552 名前:デフォルトの名無しさん :04/08/21 16:45
インクルードの次の行に
gap::sweet texture;
という記述があるのですが、
これはどういう構文なのでしょうか?
初心者で申し訳ない。

553 名前:デフォルトの名無しさん :04/08/21 16:48
>>552
名前空間(またはクラス型) gap のメンバである sweet 型の変数 texture の定義。
インクルードの次の行であることには意味が無い。

554 名前:デフォルトの名無しさん :04/08/21 16:48
グローバル変数ですよ

555 名前:マイク ◆yrBrqfF1Ew :04/08/21 16:54
//header
namespace gap {
typedef void sweet();
}


//sourcefile
gap::sweet texture; //declare

//omit

gap::sweet texture //def
{
std::cerr<<"\0m0th3rfuck3r"<<std::flush;
std::teminate();
}

556 名前:522 :04/08/21 16:54
つまり、
名前空間 gap のメンバである sweet 型の変数 texture を
グローバル変数に定義しているということで間違いないでしょうか?

557 名前:マイク ◆yrBrqfF1Ew :04/08/21 16:55
失礼。間違い。

558 名前:デフォルトの名無しさん :04/08/21 16:59
>>555,>>557 頭悪・・・そう。

559 名前:522 :04/08/21 17:03
ヘッダファイルの中で
namespace gap{
void sweet::print()
}

としておいて、ソースの中で
gap::sweet texure
texture.print()

となっているのですが、これは
sweet型の変数textureがprint()という関数を
呼び出しているということであってますでしょうか?

560 名前:デフォルトの名無しさん :04/08/21 17:06
>>559
いや、それだとコンパイル通らないはず。

ところで、そのプログラム全部ここで解説させるつもりなのか?

561 名前:デフォルトの名無しさん :04/08/21 17:10
>>560
セミコロンくらい見逃してやれよ。

562 名前:マイク ◆yrBrqfF1Ew :04/08/21 17:11
>>558
ん?ならお前は何大卒だ?

563 名前:デフォルトの名無しさん :04/08/21 17:12
>>523
char*に対するfillはmemsetで特殊化している実装が多いです

564 名前:522 :04/08/21 17:12
>>560
初心者なんだ。イジめるなよ。
コンパイルは通るとおもう。
>>559に書いた通り。

565 名前:デフォルトの名無しさん :04/08/21 17:15
>>562 大学卒業してないよ。
頭悪そうだと思っていたが、もういいかげん頭悪いんだとわかった。
もう触りません。スレ汚して悪かった。

566 名前:デフォルトの名無しさん :04/08/21 17:19
>>564
名前おかしいよ藁

567 名前:デフォルトの名無しさん :04/08/21 17:21
えっと、C言語を使って現在ゲームをコツコツと作ってるのですが
複雑になるにつれ、クラスに纏めたいと思い、C++に手をだしました。
ただ、CもC++もまだ初心者で、中々苦労しています。
特に困っているのが、何をクラスにして派生クラスは何になるのか、メンバは何を持たせるか
みたいな部分が中々把握できません。
基礎的な書き方のようなものは、本を買ってプログラム組んでみました。
こういったことに慣れるための良い練習法のようなものがあれば教えてください。

568 名前:マイク ◆yrBrqfF1Ew :04/08/21 17:21
>>565
わかればいいさ。

569 名前:アイク ◆uCUYQ8/A2w :04/08/21 17:26
俺もコテハンデビューする

570 名前:デフォルトの名無しさん :04/08/21 17:33
>>568
ワラタ

571 名前:デフォルトの名無しさん :04/08/21 17:37
>>567
包含関係に気を配るとよろしいかも。
あと、Effective C++あたりが定番かな。

572 名前:デフォルトの名無しさん :04/08/21 17:51
>>567
http://www.amazon.co.jp/exec/obidos/ASIN/4881356194/250-1099330-3815450

573 名前:デフォルトの名無しさん :04/08/21 18:06
>>571-572
アドバイスありがとうございます。
本も探してみます

574 名前:アイク ◆uCUYQ8/A2w :04/08/21 18:18
>>573
探してる暇があんなら、さっさとamazonで注文しろや

575 名前:アイク ◆uCUYQ8/A2w :04/08/21 18:21
>>574
お前が買ってこいやヴォケ

576 名前:マイク ◆yrBrqfF1Ew :04/08/21 18:24
ただでさえ馬鹿が多いのにうんざりするのが一人増えたな。

577 名前:アイク ◆uCUYQ8/A2w :04/08/21 18:36
>>575
トリップパクんなタコ

>>576
ほんたまとマイクは死んだほうがいいよな

578 名前:デフォルトの名無しさん :04/08/21 21:10
以下の関数を修正して、標準出力ではなくて、st::stringに出したいのですが、
どのようにすればいいんでしょうか・・・

void Hage::OutLog(const char* fmt, ...)
{

va_list argp;
va_start(argp, fmt);
vfprintf(stdout, fmt, argp);
va_end(argp);
fprintf(stdout, "\n");
}


579 名前:デフォルトの名無しさん :04/08/21 21:12
std::stringにタブがあるかどうかを調べるにはどうすればいいですか?

std::string sss;

sss = "abc<TAB>bbb";

※<TAB>は制御コードのTABだと思ってください。

で、このストリングを、

sss.find();で見つけたいのですが、どうすればできますか?
そもそも、find()で制御コードを検索することってできるのでyそうか?


580 名前:デフォルトの名無しさん :04/08/21 21:13
cppllでつまんねえ喧嘩してるぞ。どっちもどっちだな。傍から見ていると。

581 名前:アイク ◆uCUYQ8/A2w :04/08/21 21:32
>>578
vsprintfでも使え

>>579
if(sss.find('\t')!=std::string::npos)//見つかった

582 名前:デフォルトの名無しさん :04/08/21 21:33
>>579
\

583 名前:デフォルトの名無しさん :04/08/21 21:38
>>578 vsnprintf

584 名前:デフォルトの名無しさん :04/08/21 21:51
>>579
>※<TAB>は制御コードのTABだと思ってください。

嫌です。

585 名前:デフォルトの名無しさん :04/08/21 21:59
>>580
典型的な宗教論争だね。2ch なら煽り入れて楽しむところだが。

586 名前:11063 :04/08/21 22:24
11056 にはビックリしますた。

>>580,>>585
そんなこと言ってないでお前らも参加しろよー
ほれ、よく言うじゃん、「踊る阿呆に、見る阿呆。同じ阿呆なら踊らにゃそんそん。」って。

587 名前:デフォルトの名無しさん :04/08/21 22:37
その阿呆と違って本物の阿呆だから
触りたくないです

588 名前:11063 :04/08/21 22:47
>>587
漏れにレスしたのは触ったことにならんの?
お前も阿呆、決定。

589 名前:デフォルトの名無しさん :04/08/21 22:59
国語能力なさ過ぎ

590 名前:デフォルトの名無しさん :04/08/21 23:01
道化師さんキター?
VC6のときにお世話になりますた。

591 名前:デフォルトの名無しさん :04/08/21 23:01
>>586
その「踊る阿呆に・・・」って阿呆なのが前提じゃないと意味無いと思う。

592 名前:デフォルトの名無しさん :04/08/21 23:07
11063は、背伸びしすぎだな。
たぶん放置されるはず。

593 名前:デフォルトの名無しさん :04/08/21 23:11
cppllの話題なぞ持ち込まんでくれよ

594 名前:デフォルトの名無しさん :04/08/21 23:15
キモヲタ同盟に名称変更希望。

595 名前:11063 :04/08/21 23:20
>>590
以前からちょこちょこ書き込んでますよー
なんかスレ汚しになっちゃったんでお暇しますー

|ω・)ノシ お休みなさいー

596 名前:デフォルトの名無しさん :04/08/22 00:00
要するに
「継承するとき、いちいち基底クラスのprivateな定義まで読みたくねーよ」
って事か。
俺もprivate virtual使いだけど、一理ないこともないかも。

597 名前:デフォルトの名無しさん :04/08/22 00:24
>>private virtual
見なくていい(普通の)privateとは分けて、しっかりコメントつけておかないと、
読み飛ばされる可能性が高いね。

ただ、C++使いとしては、アクセス指定とvirtual指定とが
まるで関係ないということは知っておいて欲しい。
public virtual を派生先で private にしてオーバーライドとか、
逆に private virtual を派生先で public にしてオーバーライドとか、
いくらでも有り得るし、相応の効果がある。
実際に役に立つかとか、良し悪しはまた別にして。

598 名前:デフォルトの名無しさん :04/08/22 00:53
>> private virtual @ cppll
Doxygenのようなドキュメント生成ツールでは一般的にprivateなメンバは
ドキュメント化されない。
だからドキュメントを信じてコーディングすると予期せぬエラー
をうけることになるわけだ。だからprivate virtualはイクナイ。

でも、やる人の気持ちがわからないわけではない。
やるなら何らかの形で明示的に示してほしいなぁ。


599 名前:デフォルトの名無しさん :04/08/22 01:11
>>598
そりゃDoxygenの問題だろ。提案すれば対応してもらえそう。

600 名前:デフォルトの名無しさん :04/08/22 01:27
VC8、未だに例外仕様はnothrowしか出来ねぇ_| ̄|○

601 名前:デフォルトの名無しさん :04/08/22 01:29
string ss = "aaaabbbb";

から、aaaaとbbbbを切り取って、それぞれstringに格納したいのですが、
いい方法はないでしょうか?


602 名前:デフォルトの名無しさん :04/08/22 01:36
>>601 std::string::substr()

603 名前:デフォルトの名無しさん :04/08/22 01:38
>>602
すぺしゃるさんくす!!!


604 名前:デフォルトの名無しさん :04/08/22 01:48
>>599
ありゃ? いいたいことが伝わんなかった…。
Doxygenでもprivateなメンバをドキュメントに含めさせることは可能なはず。
言いたいことはそれが可能かどうかではなくて、すべきでない場面が多々あるってこと。

例えばなんらかのライブラリを作って、それ用のAPIドキュメントを作るときは
privateなメンバを含めないでしょ、多分。
だって、それを使用するユーザは内部でのみ使用されるprivateなメンバを
意識する必要は無いし、しちゃいけない。

ところが、そのライブラリの中にprivate virtualな関数があると、ユーザ
privateな関数まで見てコーディングしなくちゃいけなくなる。
問題ありだよね?

605 名前:デフォルトの名無しさん :04/08/22 01:54
>>604
C++ではprivateでもvirtualであればユーザーに関係有るんだから、
ドキュメント作るなら含めないといけないだろ。

Doxygenがそれには対応してないだけ。
private virtualが否定される理由としては理不尽。

606 名前:デフォルトの名無しさん :04/08/22 01:56
>>604
template メソッドの場合は、規定クラスの公開メソッドのドキュメントに
「派生クラスでこれこれのメソッドをオーバーライドすること」と書くから、
大差ないと思うが。

なんにしても、どっちでも良いよ、そんなの。

607 名前:デフォルトの名無しさん :04/08/22 02:08
>>605
そもそもprivate virtualの是非について話しているのに
>C++ではprivateでもvirtualであればユーザーに関係有るんだから、
という前提を持ち出すのも理不尽。

俺はprivateなのにユーザに関係することが問題だと思う。
多分、これはpublic, private等の捉え方の違いなのかな?
俺はクラスの使用者に対する可視性だと思っているから、privateなのに
使用者に見えることが気持ち悪い。

これを可視性ではなくてアクセス権として捉えるとprivate virtual肯定派
のいいたいことが理解出来る。

なんだかんだ言って
>>606
>なんにしても、どっちでも良いよ、そんなの。
に賛成。 消えます。

608 名前:デフォルトの名無しさん :04/08/22 02:50
なんだ、せっかく飛び火したのにもう鎮火したのか?

609 名前:デフォルトの名無しさん :04/08/22 02:55
>>600
nothrow は最適化に使えるけど、他の例外指定って使う価値あるか?
未処理例外で死ぬか、terminate() で突然死するか程度の差しか無いような。
C++はデフォルトの例外指定が throw(...) なので
一箇所でも指定していない関数があると誓約が途切れてしまうし。

610 名前:デフォルトの名無しさん :04/08/22 02:57
>>609
void hoge(){ throw; }
set_unexpected( hoge );


611 名前:デフォルトの名無しさん :04/08/22 04:35
C++ って、
class C
{
...
    struct CImpl;
    CImpl* pimpl_;
};

class C
{
...
    struct CImpl* pimpl_;
};
と書く事って認められてるんですか?VC7.1じゃコンパイル通んないんですが…

612 名前:611 :04/08/22 04:52
あ、コンパイラ通らないってのは
struct C::CImpl{ ... }
ってやるとです。。

613 名前:デフォルトの名無しさん :04/08/22 05:10
struct C::CImpl {} <-なにこれ?

CImplはどこで定義してんの?

614 名前:デフォルトの名無しさん :04/08/22 05:21
>>613
;が抜けてるけど,それがCImpl(Cのインナークラス)の定義ってことなんでしょう.

gccだとこんな感じ.規格では???
class C {
struct CImpl; // (a)
CImpl* pimpl_; // (a)
struct CImpl* pimpl_; // (b)
};
struct C::CImpl {}; // (1)
struct CImpl {}; // (2)
(a)-(1) ○
(b)-(1) ×
(a)-(2) ○
(b)-(2) ○


615 名前:デフォルトの名無しさん :04/08/22 05:26
>>614
Exceptional C++ では通して
(b)-(1)
の形式で書かれてるのですが、規格ではどんなもんでしょう…

616 名前:デフォルトの名無しさん :04/08/22 07:42
struct CImpl* pimpl_;
これは宣言じゃないんだから、
b-1が不可能なのは当然でない?

617 名前:デフォルトの名無しさん :04/08/22 07:46
>>616
その説明だと本来は(b)-(2)も通っちゃいけないってこと?


618 名前:デフォルトの名無しさん :04/08/22 07:47
質問です。
virtualなデータメンバって何故できないのでしょうか?
あれば便利だとおもうのですが。

619 名前:デフォルトの名無しさん :04/08/22 07:53
ちょっと「便利な状況」が思い付かないなぁ。
たとえばどんな感じに使いたい?

620 名前:デフォルトの名無しさん :04/08/22 08:21
>>618
テンプレートクラスって知ってるよね?

621 名前:デフォルトの名無しさん :04/08/22 08:22
>618
いったいどういう挙動をするものなのか、まるで思いつかない。
protectedメンバ変数とか、参照を返すvirtual関数で満たされないものなのか?

622 名前:デフォルトの名無しさん :04/08/22 09:43
>>617
(b)-(2)は(2)で宣言と定義を同時に行ってるんだから、問題ない。

623 名前:デフォルトの名無しさん :04/08/22 09:51
>>618
参照を返す virtual メソッドで我慢しとき。

624 名前:617 :04/08/22 09:53
>>622
なるほど.616を理解できました.

>>615
Exceptional C++は誤植なのかもしれないですね.


625 名前:デフォルトの名無しさん :04/08/22 11:05
>>624
> Exceptional C++は誤植なのかもしれないですね.

例えば何ページ?


626 名前:618 :04/08/22 11:22
みなさん、いろいろ意見ありがとうございます。やりたいことはこんな感じです

// あるライブラリで定義されてるクラス
class B {}
class B1 : public B {}
class B2 : public B {}

// 自分のクラス
class A
{
 vritual B b:
 void proc(){ b に対して色々な処理}
}
class A1 : public A { B1 b1;}
class A2 : public A { B2 b2;}

みたいな感じです。

>>623
>参照を返す virtual メソッドで我慢しとき。

この方法がよさげなので、ためして見ます。m(_ _)m


627 名前:デフォルトの名無しさん :04/08/22 11:29
>>626
class B { virtual void age() = 0; };
class B1 : public B { void age() { fusianasan(); } };
class B2 : public B { void age() { mokorimoko(); } };
class A
{
B* sage;
void proc() { sage->age(); }
};
class A1 : public A { A1() { sage = new B1; } };
class A2 : public A { A2() { sage = new B2; } };

628 名前:618 :04/08/22 12:15
>>627
あ〜あ〜ぁあ〜ぁあ〜ぁあぁ。正にその通りです。
最初からインスタンス作ろうしたからダメなんだ。orz

muchas gracias、merci beaucoup、danke schon、grazie mille、非常感謝

629 名前:デフォルトの名無しさん :04/08/22 13:26
>>611
上が class C 内に struct CImpl を宣言している。
下がグローバル名前空間に struct CImpl を宣言している。

初めて class/struct XXXX の形で現れた名前の宣言されるスコープは、
それが他の宣言中に含まれるか、単体で文になっているかで変わるらしい。

詳しくは規格の 3.3.1 -5- 。
ちなみに friend 宣言のときはまた別のルールになる。

630 名前:デフォルトの名無しさん :04/08/22 13:32
>>627
class A
{
 virtual B& sage() = 0;
 void proc() { sage().age(); }
};

こっち(参照を返す virtual メソッド)のほうがいいと思う。

631 名前:アイク ◆uCUYQ8/A2w :04/08/22 13:43
>>630
なぜそっちがいいと思うの?

632 名前:デフォルトの名無しさん :04/08/22 14:14
>>631
ポインタを保持するサイズが節約できる。
>>627の例ではvtableと相殺するが、たぶんAにはvirtualなデストラクタが必要だろう。)
所有権の混乱を避ける。
>>627のコードでnewしたB1,B2をだれがdeleteするべきなのか不明。)
ポインタへの代入忘れを防げる。

633 名前:アイク ◆uCUYQ8/A2w :04/08/22 15:05
>>632
大したメリットが無いな。

sageオブジェクトが必要な時に、毎回仮想関数経由での取得による速度低下の方が俺は心配だ。

634 名前:デフォルトの名無しさん :04/08/22 15:31
仮想関数での速度低下は都市伝説
本当にそれがネックになるケースは、プログラム効率で有名な話の8:2より
はるかに小さいんだから、あんま気にしてもしょーがないだろ

635 名前:デフォルトの名無しさん :04/08/22 15:46
実装やテストの効率を気にしたほうがいいな

636 名前:デフォルトの名無しさん :04/08/22 15:51
std::stringクラスのfindメソッドで" - "を検索したいのに、"-"として検索されるみたいです。
" - "のような、空白を含む文字列を正しく検索するにはどうしたらいいでしょうか?


string sss = "100-100";

sss.find(" - ");

で検索すると、検索できてしまうのです・・・ORX


637 名前:デフォルトの名無しさん :04/08/22 15:59
>>636
見つからなかった時の戻り値が string::npos だってのは知ってる?

638 名前:デフォルトの名無しさん :04/08/22 16:00
(" - ")
↑顔文字に見える

639 名前:デフォルトの名無しさん :04/08/22 16:01
検索されないけど。
- STLPort4.6.2

640 名前:デフォルトの名無しさん :04/08/22 16:01
>>636
そういうメソッドなんだろ。
自分で作りこめ。

>>637
文章よく嫁



641 名前:デフォルトの名無しさん :04/08/22 16:02
strstr(sss.c_str()," - ");

642 名前:デフォルトの名無しさん :04/08/22 16:03
>>638
はっとりくんの弟に似てんな。


643 名前:デフォルトの名無しさん :04/08/22 16:06
>>642
もまえの友達の弟なんて知らん。


644 名前:デフォルトの名無しさん :04/08/22 16:10
>>636
「検索できてしまう」って、 find() の戻り値はどうなってたの?

645 名前:デフォルトの名無しさん :04/08/22 16:12
std::string sss( "100-100" );
std::string nlp( " -" );

std::search( sss.begin(), sss,end(), nlp.begin(), nlp.end() ) == sss.end();

これでは?

646 名前:デフォルトの名無しさん :04/08/22 16:14
>>645 なにそれ?

647 名前:デフォルトの名無しさん :04/08/22 16:16
>>644
戻り値は"-"のある場所の3です。

>>643
はっとりくんって忍者はっとりくんのことじゃないですか?


648 名前:デフォルトの名無しさん :04/08/22 16:18
>>647
しんぞー

649 名前:デフォルトの名無しさん :04/08/22 16:19
実際にコードを書いた人は無視

650 名前:デフォルトの名無しさん :04/08/22 16:25
>>647
検索されなかったって言っただろ。
いや、検索は出来たな。マッチはしなかったけど。

651 名前:デフォルトの名無しさん :04/08/22 16:27
恥ずかしいんだけど、STLのバージョンってどう調べるの?

652 名前:デフォルトの名無しさん :04/08/22 16:29
製品によって違うし

仕様のバージョンとかリビジョンならあるんだろうけど(auto_ptrとか)
番号がついてるかはわからん。

653 名前:デフォルトの名無しさん :04/08/22 16:31
>>651
STLのバージョンってVC++のバージョンそのものじゃないの?
私の認識では、STLはVC++そのものということになっている。


654 名前:デフォルトの名無しさん :04/08/22 16:34
ずいぶんいい加減なライブラリだな

655 名前:618 :04/08/22 16:36
>>630 >>631 さん
いちおう、目的は「Bに対する諸々の処理を一箇所にする」なのであとは
どっちが良いか色々ためしてみます。ありがとう。

656 名前:マイク ◆yrBrqfF1Ew :04/08/22 16:43
そういやstd::strstrの第一引数の文字列が'\0'で終わってなかったら
どうなるんだろうな?

657 名前:デフォルトの名無しさん :04/08/22 16:48
>>636
使ってるコンパイラで↓のプログラムの実行結果を確認してください。
ちなみに g++ (GCC) 3.3.3 (cygwin special) では not found になります。

#include <string>
#include <iostream>
int main()
{
  std::string s = "100-100";
  std::string::size_type p = s.find(" - ");
  if( p != std::string::npos ) std::cout << p << std::endl;
  else std::cout << "not found" << std::endl;
  return 0;
}

658 名前:デフォルトの名無しさん :04/08/22 17:13
どうでもいいが、 cygming special じゃない?

659 名前:657 :04/08/22 17:24
>>658
お?そういえば前はそうだったような気がします。
でもこれは g++ --version からコピペしてます。
こないだ入った更新をインストールしたから、それで変わったのかもしれません。

660 名前:デフォルトの名無しさん :04/08/22 17:48
>>657

自分の環境でためしたところ、not foundになりました。

findでは空白文字を含む文字列の検索は正しくできるけど、
find_last_ofは、空白文字を含む文字列の検索は正しくされないのでしょうか?



661 名前:デフォルトの名無しさん :04/08/22 17:52
>>660
なんで>>636の時点で find_last_of() と書かなかった?
find_last_of() の仕様知ってるのか?
欲しいのは rfind() じゃないか?

662 名前:デフォルトの名無しさん :04/08/22 17:55
これ、年金の財源にしようぜ

663 名前:662 :04/08/22 17:56
みすだす。。。すまそ・・・

664 名前:デフォルトの名無しさん :04/08/22 17:58
>>660
救えねぇやつ。
なんか ttp://www8.ocn.ne.jp/~tsugaru3/shakkinn1.htm これを思い出しちまったよ。

665 名前:デフォルトの名無しさん :04/08/22 18:30
template <class T>
inline T* Create()
{
 return new T;
}
こんな感じの関数を見たんですけどこれはどうやって呼び出すんですか?

666 名前:デフォルトの名無しさん :04/08/22 18:35
int * hoge = Create<int>();

667 名前:デフォルトの名無しさん :04/08/22 18:43
>>666
ほーなるほどありがとう

668 名前:デフォルトの名無しさん :04/08/22 19:17
>>666
int *じゃなくてT *でしょ?

669 名前:デフォルトの名無しさん :04/08/22 19:20
>>668
なにいってんの?

670 名前:デフォルトの名無しさん :04/08/22 19:21
夏なんていらない

671 名前:デフォルトの名無しさん :04/08/22 19:21
最近暑かったしね

672 名前:デフォルトの名無しさん :04/08/22 19:23
熱雑音が強いな

673 名前:デフォルトの名無しさん :04/08/22 20:22
>>661
神様、ありがとうございますぅ^_~


674 名前:デフォルトの名無しさん :04/08/22 20:27
virturalを指定しない(メンバ)関数って(派生クラスのメンバ関数で)オーバーライドできないの?
テストコードを実装できるスキルがまだないので教えてください。

675 名前:デフォルトの名無しさん :04/08/22 20:30
>>674
スキルがないんだったら今知らなくてもいいこと
答えは出来ません
非仮想関数の再定義が起こるようなら設計を見直すべき

676 名前:デフォルトの名無しさん :04/08/22 20:33
>>675
ありがとうございます。
不安なら現時点ではvirtual指定しておいたほうが嬉しいことが多い、という理解で勉強を進めます。

677 名前:デフォルトの名無しさん :04/08/22 20:39
>>676
という理解はお勧めしない。
virtual になれないメンバや virtual が効かない場面で
かえって深い混乱の原因になるからだ。

根を理解せずに使いたい人には C++ は向かない。ここを忘れるな。

678 名前:デフォルトの名無しさん :04/08/22 20:42
>>676
そもそも、やたらと継承するな。てきとーに設計して、てきとーに継承するから
オーバーライドできるか否かで悩むことになる。

679 名前:デフォルトの名無しさん :04/08/22 20:42
>>677 ・・・

680 名前:デフォルトの名無しさん :04/08/22 20:45
>>678
オーバーライドされる可能性があるメンバ関数と、未来永劫絶対にオーバーライドされない
メンバ関数を見分ける方法があったら教えてください。状況に依存とかいうのはナシの方向で。

681 名前:デフォルトの名無しさん :04/08/22 20:50
>>680 小学生は帰れ。

682 名前:680 :04/08/22 20:51
素朴でアホな疑問すぎてスルーされてる?
こういう疑問って無用なのかな・・・?

683 名前:デフォルトの名無しさん :04/08/22 20:52
>>680
自分が今何を作っているのかを考えたら答えでるだろうが

684 名前:680 :04/08/22 20:53
場を見誤ったようです。すみません。無視して下さい。

685 名前:デフォルトの名無しさん :04/08/22 21:14
>>681
いや、ご尤もな質問だぞ?
本気で聞くがまじめに考えたことあるか?? いや現在形で考えてるか?

686 名前:デフォルトの名無しさん :04/08/22 21:15
>>680
糞言語なので、ありません。

687 名前:デフォルトの名無しさん :04/08/22 21:24
>>685
>>683

688 名前:デフォルトの名無しさん :04/08/22 21:35
>>685
死ねJava厨

689 名前:デフォルトの名無しさん :04/08/22 21:38
このスレは末端のコーダが多いみたいだなw
設計なんか考えたこともない奴隷は気楽でいいよなw

690 名前:デフォルトの名無しさん :04/08/22 21:42
>>688
何でそこで Java が出てくるんだよスカタン

691 名前:デフォルトの名無しさん :04/08/22 21:46
>>629
http://pc5.2ch.net/test/read.cgi/tech/1077985164/27
昔の疑問↑が解決したっ!ありがとうございました!

692 名前:デフォルトの名無しさん :04/08/22 21:47
>>691
dat落ちしているスレッドにリンクを貼っても見られないから、コピペしてくれ。

693 名前:デフォルトの名無しさん :04/08/22 21:51
>>692
27 名前:デフォルトの名無しさん 投稿日:04/02/29 16:48
当方、以下のコードが通りません。どこが悪いかご指摘願います。
Metrowerks CodeWarrior 8.2 Pro for Winを使っております。

(hello.cpp)
class hoge
{
public:
hoge();
~hoge();
private:
struct impl* pimpl_;
};
struct hoge::impl{};
hoge::hoge() : pimpl_(new impl){}
hoge::~hoge(){delete pimpl_;}
int main()
{
hoge hage;
return 0;
}


694 名前:デフォルトの名無しさん :04/08/22 21:51
693の続き

(メッセージ)
エラー: 宣言シンタックスエラー
hello.cpp 行: 9 struct hoge::impl{};
エラー: 宣言シンタックスエラー
hello.cpp 行: 10 hoge::hoge() : pimpl_(new impl){}
警告: 不完全な struct/union/class 'impl' の使い方が不当です。
hello.cpp 行: 11 hoge::~hoge(){delete pimpl_;}

ちなみに
struct impl;
impl* pimpl_;
とあらかじめ宣言すれば通ります。

695 名前:デフォルトの名無しさん :04/08/22 21:52
規格の 3.3.1 ってどこで見られる?
ググっても出てこねぇ…

696 名前:デフォルトの名無しさん :04/08/22 21:55
>>691
過去ログ見たが、その書き込みから30分で>>629と同じ答えが出てないか?

697 名前:デフォルトの名無しさん :04/08/22 21:57
>>695 ttp://www.kuzbass.ru/docs/isocpp/basic.html#basic.scope.pdecl

698 名前:デフォルトの名無しさん :04/08/22 21:58
http://www.kuzbass.ru/docs/isocpp/basic.html#basic.scope.pdecl

699 名前:デフォルトの名無しさん :04/08/22 22:02
>>697-698
サンクス!

700 名前:691 :04/08/22 22:09
あの時に解決したのはしたのだけれども、明確にどのようなときに
globalでどのようなときにinner classなのか、また規格のどこに
根拠があるかがはっきりしたということで。

701 名前:デフォルトの名無しさん :04/08/22 22:19
Exceptional C++ はなんだったんだろう…
本一冊を通してコンパイラを通らない規格外のコードを載せてたことになるが

702 名前:デフォルトの名無しさん :04/08/22 22:20
>>700
いや、はっきりしてただろ。

28 名前:デフォルトの名無しさん[sage] 投稿日:04/02/29 17:16
>>27
'struct impl'の形はelaborated-type-specifierといって、でてくる文脈によって働きが微妙に異なる。
struct impl;
とかくと、そのスコープでimplが宣言され、
struct impl* pimpl_;
とかくと、「そのスコープを含む、最も内側の、非クラス、且つ、非関数宣言の」スコープ(この場合はグローバル名前空間)
でimplが宣言されたことになる。
詳しくは規格の3.3.1の5を参照すべし
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

703 名前:デフォルトの名無しさん :04/08/22 22:22
例外だもん

704 名前:デフォルトの名無しさん :04/08/23 02:49
下記要件を満たすスマートポインタの実装って無いですか?
・参照はリンクリストで管理(使用に付随するnewや埋め込みカウントが無い。)
・スマートポインタ間での自動アップキャスト可能
・明示指定時のみスマートポインタ間でダウンキャスト可能
・関数内定義クラスのポインタのハンドリング可能

なんか最後のが無理っぽい気もするんですが、どうなんでしょう?

705 名前:デフォルトの名無しさん :04/08/23 02:51
newしないって?!

706 名前:704 :04/08/23 04:47
>>705
最初の条件は
http://boost.cppll.jp/HEAD/libs/smart_ptr/smarttests.htm
こういう意味でした。

707 名前:デフォルトの名無しさん :04/08/23 04:56
Foo a(10);
Foo b = Foo(10);

bの場合は一時オブジェクトが作成されてコピーコンストラクタによって、
メンバがコピーされますよね。
効率面から言えばbは非効率でしょうが、
bのような初期化を積極的に利用する状況ってどんなものがあるんでしょうか?


708 名前:デフォルトの名無しさん :04/08/23 05:00
>>707
テンポラリが作られる場合、コンパイラはそれを積極的に最適化出来る
RVO でググれ

709 名前:デフォルトの名無しさん :04/08/23 05:18
RVO→More Effective C++の第20項

VC++について調べたい人は、
http://blogs.msdn.com/slippman/archive/2004/02/03/66739.aspx

g++のswitch
`-fno-elide-constructors'
The C++ standard allows an implementation to omit creating a
temporary which is only used to initialize another object of the
same type. Specifying this option disables that optimization, and
forces g++ to call the copy constructor in all cases.

規格的には、12.8.15。

710 名前:デフォルトの名無しさん :04/08/23 05:27
あと、 T t( u ) を T t = u の代わりに使うのが普通。
T t = u は operator = ではなくコピーコンストラクタによるので混乱させやすいし。

711 名前:デフォルトの名無しさん :04/08/23 06:13
RVOによる最適化を前提とすればaとbは効率面では変わらないって事ですよね。
あとは >>710 氏の言うように可読性の向上ってくらいなんでしょうか。

712 名前:デフォルトの名無しさん :04/08/23 08:19
privateなメンバをヘッダに書くのってどうなんでしょう。
たとえば、WindowsでIShellFolderを抽象化したディレクトリクラスを作るとして、

class directory {
IShellFolder* sf;
public: ... };

とすると、このクラスのクライアントコードがIShellFolderに直接触れなくても、
このヘッダを使うソースではIShellFolderを含むヘッダをincludeしないとならなくなりますよね?

それを避けるための手段のひとつにpimplとかインターフェイスベースってのがあるんでしょうが、
手間も掛かるし、なんかどうも納得いかないんですよね。


713 名前:デフォルトの名無しさん :04/08/23 09:44
>>712
インターフェースベースだと実装が変わってもクライアントの再コンパイルが必要ないな。
使うのは自分の中だけ。DLLなどで外部に公開しないんならメンバを含めてもいいと思うけど。

714 名前:デフォルトの名無しさん :04/08/23 10:04
まあ、この場合みたいにポインタメンバだったら、先行宣言するだけで
実装の詳細が含まれるヘッダをincludeする必要はないけどね。
そしてその考え方の延長上にpimplがあったりする。
インターフェイスクラスはまたちょっと考え方が違うけど。

で、privateメンバも含めて実装の詳細をヘッダ(class定義)に書かなきゃいけないのは
C++の採った効率上の妥協だと思われる。
すぐわかる利点のひとつに「スタック上に生成出来る」点がある。

715 名前:デフォルトの名無しさん :04/08/23 18:16
BCCでDirectXSDKを使いたいんですが、上手くいきません。
何が悪いのでしょうか?
ここのサイトを参考にして設定して ttp://goldfly.ld.infoseek.co.jp/program/directx/bcc90b.html
ここのサイトの2Dの描画のサンプルを ttp://www.geocities.jp/toru_website/sample/index.html#dxg
コンパイルしようとしたのですが上手くいきません。
エラー・詳細です。 ttp://shiva.dip.jp/up/box/up0951.gif

◆bcc32.cfg
-I"c:\DXSDK\Include;c:\Borland\Bcc55\include"
-L"c:\DXSDK\Lib\BLib;c:\Borland\Bcc55\lib"

◆ilink.cfg
-L"c:\DXSDK\Lib\BLib;c:\Borland\Bcc55\lib"

716 名前:691 :04/08/23 19:15
>>702
あれっ、脳みそが解決前にタイムスリップしてた。回答してくれた人スマソ

717 名前:デフォルトの名無しさん :04/08/23 19:20
BCCの「プロジェクト設定 - リンク」で
dxguid.lib dxerr9.lib d3d9.lib d3dx9.lib をリンクしる


718 名前:715 :04/08/23 19:48
>>717
BCCはBCCDeveloper(?)を使わずにコマンドラインでやっているので
プロジェクトの設定とかないんです。
どうしたらいいのでしょうか?

719 名前:デフォルトの名無しさん :04/08/23 20:18
マニュアルを読んで調べてくれい

720 名前:715 :04/08/23 21:03
>>719
ありがとうございます!
なんとかできました!

通常のコンパイル時のコマンドの後に>>717のライブラリ名を並べて書いたらできました。
bcc32 -W -emain.exe main.cpp c:\dxsdk\blib\dxguid.lib c:\dxsdk\blib\dxerr9.lib c:\dxsdk\blib\d3d9.lib c:\dxsdk\blib\d3d9.lib
となってかなり長くなりましたが。

でもわざわざこれを書かなくてはならないということは、
bcc32.cfgやilink.cfgでDirectXのライブラリの設定した意味があるのでしょうか?

721 名前:デフォルトの名無しさん :04/08/23 23:10
標準C++以外の環境依存はスレ違いだぞっと。

で、bcc32.cfgに-Lをつけてディレクトリを指定し、
#pragma comment(lib,)を書いたヘッダでも用意しときゃ
少しは楽になるんじゃないかな。

722 名前:デフォルトの名無しさん :04/08/24 05:33
非テンプレート関数でコレクションクラスを返すときってどうするのがいいんでしょうか?
std::vector<int> func();
void func(std::vector<int>& collection);
の二通りがすぐに考え付くのですが、後者の場合funcの中でclear()するべきなのか、
それとも後ろに追記するべきなのか。
コメントに書けばいいというのはそのとおりなのですが、前者ならその辺迷わないので悩みます。

std::auto_ptr< std::vector<int> > func();
というのもアリなんでしょうが、あまり誉められた形じゃない気もするし・・・


723 名前:デフォルトの名無しさん :04/08/24 06:39
>>722
後者にして、後ろに追記する機能を関数としておけば、
clear() すべきかどうかは使う側で選べる。
あとは適切な関数名を与えてコメントは不要にすればいい。

724 名前:デフォルトの名無しさん :04/08/24 11:29
C++でファンクションポインタはどう定義しますか?
voidポインタは駄目みたい。

725 名前:デフォルトの名無しさん :04/08/24 11:32
Cと同じ
メンバ関数なら::*

726 名前:デフォルトの名無しさん :04/08/24 11:37
>>722
俺は必ずin、out、inout修飾子をつけてる。COMのパクリね。
outならコレクションは初期化される、inoutなら初期化されない。
void func(/*[out]*/std::vector<int>& collection);

727 名前:デフォルトの名無しさん :04/08/24 11:49
コメントアウトするするより#define OUTとかの方が良くないか?

728 名前:デフォルトの名無しさん :04/08/24 12:06
>>727
726 じゃないけど、COM 相互運用のコードでは interface の宣言のときに >>726 のような
コメントにするのがデファクトなので、それに則ってるわけです。
(要するに RPC の idl 風の記述にしてるわけ)。

729 名前:726 :04/08/24 12:10
>>728
しかし、>>726だと実際に宣言コメントアウトしたいとき
邪魔なんだよね。 >>727悪くなし。


730 名前:デフォルトの名無しさん :04/08/24 12:16
別にそんなもんついてなくてもconstなしの参照/ポインタはout扱いでいいだろ。

731 名前:デフォルトの名無しさん :04/08/24 12:42
>>730
[in, out] ってのもあるし。既存の何かを更新する関数とか。

732 名前:デフォルトの名無しさん :04/08/24 13:00
サンクス>>725
Cの関数ポインタ調べて書いたら通ッタ

733 名前:デフォルトの名無しさん :04/08/24 13:18
C++の文法を覚えたんですが、次に覚えるのはなんですか?

734 名前:デフォルトの名無しさん :04/08/24 13:22
>>733
2chでの質問の仕方。

735 名前:デフォルトの名無しさん :04/08/24 13:22
>>733
STLとMFC。

STLは必須だから。
MFCは学習意欲を維持するため。

736 名前:デフォルトの名無しさん :04/08/24 13:23
自分で課題を見付けることを覚えたほうが将来的には良い
マジレス

737 名前:デフォルトの名無しさん :04/08/24 13:24
>>733
決まったカリキュラムは無いから、好きにやってくください。

738 名前: ◆Z0vd5w812U :04/08/24 13:29
>>733
やる気を維持するために、見栄えがあるDirectXアプリ。MFC使って。
その後MFCを捨ててWin32で作る。

739 名前:デフォルトの名無しさん :04/08/24 13:36
SWIGという環境を使うと、各種スクリプト言語からC++関数を呼べるようになると思うんですが
逆にC++ベースのプログラムから各種スクリプト言語を呼んでインタプリタ等で解析する、
そういうライブラリってありますでしょうか?
Tclという言語は出来るようですが、RubyやJavaScriptのようなOOPがいいんですが。

740 名前:デフォルトの名無しさん :04/08/24 13:41
Luaは組み込める

741 名前: ◆Z0vd5w812U :04/08/24 13:41
>>739
system()。
CreateProcess()でもいいかもしれない。

742 名前:デフォルトの名無しさん :04/08/24 13:44
Ruby含めていくらでもそういうものはある。

743 名前:デフォルトの名無しさん :04/08/24 13:52
>>739
Windows だけでいいなら ActiveScript で JScript や VBScript とかが使える。
Netscape 由来の Spidermonkey (JavaScriptエンジン) も悪くない。

744 名前:デフォルトの名無しさん :04/08/24 13:56
>>739
ActiveScriptRubyというものがあるそうです。これは関係ありませんかね?
http://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/


745 名前:デフォルトの名無しさん :04/08/24 14:03
>>743-744
それらです!!求めていたのは!
ありがとうございます!

746 名前:デフォルトの名無しさん :04/08/24 15:11
スレ違いな質問によく丁寧に答えてやるな。

747 名前:デフォルトの名無しさん :04/08/24 17:40
>>746
小学校の学級委員殿ですか?


748 名前:デフォルトの名無しさん :04/08/24 17:46
開き直ってる奴がいるな

749 名前:マイク ◆yrBrqfF1Ew :04/08/24 18:03
>>733
KDE使ってQt+OpenGLでいいだろ。
いささかあれだが。

750 名前:デフォルトの名無しさん :04/08/24 18:45
でもあれをスレ違いと言ったら
それこそC++の文法ぐらいしか質問の幅がなくなると思う。
それはそれで不便だと思うけど。


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