■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
C++相談室 part18
251
名前:
デフォルトの名無しさん
:03/04/20 16:04
>>249
なぜvectorを教えない!
252
名前:
248
:03/04/20 17:07
>>251
おお、ありがとう。みてみます。
253
名前:
デフォルトの名無しさん
:03/04/20 17:10
>>252
初心者はvectorなんか使ってはいけません
254
名前:
デフォルトの名無しさん
:03/04/20 17:12
>>253
newの方が初心者には危険だろ?
255
名前:
248
:03/04/20 18:02
vectorの
atメソッドがg++に無いということが書かれていました。
g++でも動くように、
v.at(3)=100;
を、
v[3]=100;
って書いていいということですか?
というかatメソッドは、意味無い?
256
名前:
デフォルトの名無しさん
:03/04/20 18:05
クラス定義の中で実装を書くと
明示的に inline って書かなくても
インラインになるの?
class hoge
{
public:
Hoge();
~Hoge();
void Method1(){ ... } //これインラインになる?
};
257
名前:
デフォルトの名無しさん
:03/04/20 18:17
いぇs
258
名前:
デフォルトの名無しさん
:03/04/20 18:18
>>255
意味はあるさ。オーバーインデックスした時、
atは例外を出すからデバッグしやすい。
>>256
普通はinline展開されない。VC++だと、コンパイルオプションで設定できた。
259
名前:
tantei
:03/04/20 18:18
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●別れさせ工作
あらゆる手段を使ってターゲットを別れさせます!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
その他人生相談からどんなお悩みでも解決いたします!!
直通 090−8505−3086
URL
http://www.h5.dion.ne.jp/~grobal/
メール hentaimtt@k9.dion.ne.jp
■グローバル探偵事務所
260
名前:
248=255
:03/04/20 18:27
>>258
わかりました。ありがとうございます。
261
名前:
デフォルトの名無しさん
:03/04/20 18:44
あるClassの中に、別のClass型変数を持つのって駄目?
継承して使うべきかな?
262
名前:
デフォルトの名無しさん
:03/04/20 18:52
>>258
>普通はinline展開されない。
え? 普通はされるだろ
263
名前:
デフォルトの名無しさん
:03/04/20 18:53
>>261
has-a を is-aに置き換えることは愚行
264
名前:
デフォルトの名無しさん
:03/04/20 18:56
>>261
effective-C++読んどけ。
265
名前:
デフォルトの名無しさん
:03/04/20 18:57
コンパイラは inline 化に積極的になってくれるが実際に inline 化
されるかどうかは Method の実装次第てとこだね
266
名前:
デフォルトの名無しさん
:03/04/20 18:59
>>258
でも、せっかくチェックしてくれるなら、例外なんか投げないで
abort()してくれればいいのに。
結局、STLportのデバッグモードとかの方が有難かったり。
267
名前:
261
:03/04/20 19:01
"has-a" "is-a" でぐぐってみたら
C++でプログラムを設計するということは、"is a”と"has a"の関係に分離し抽出することと考えることができる。
(
ttp://toba.yanagi.gifu-u.ac.jp/lecture/prog2/11/
)より
ということでした。
ありがとうございました。
でも置き換えるの意味がわかんないです。
268
名前:
デフォルトの名無しさん
:03/04/20 19:04
>>267
class Engine{};
class Car
{
Engine engine;
};
は正常。車はエンジンを持っている。
class Car : public Engine{};
は異常。車はエンジンではない。
269
名前:
261
:03/04/20 19:08
>>268
なるほど!かなりよく分かりました。
そのまんまのいみでしたね^^;
>>264
今度本屋で立ち読みしてきます。
ありがとうございました。
270
名前:
デフォルトの名無しさん
:03/04/20 19:31
class A;
.
.
.
class N;
A.m_classB.m_classC...m_classN.a = 1; (N回クラスが連結した先の変数aに代入している)
このような繋がりってあんまり多いと駄目ですよね。
最高どのぐらいが限界でしょうか?
271
名前:
デフォルトの名無しさん
:03/04/20 19:58
>>270
限界なんてものは無いが、クラスを使うということは、複雑な問題を分割・整理するのが目的なのに
外から内側が丸見えでは問題を複雑なままにしているので駄目だな。
272
名前:
デフォルトの名無しさん
:03/04/20 20:03
>>270
なるほど。そりゃそうですよね。
268の例みたいに
CarとEngineを"is-a"の関係で記述したときって
EngineをCarから操作できるようにするんですよね?
例えば、Car.GetEngineType(); とかのように。
Car.engine.GetType(); では駄目駄目だということですよね?
273
名前:
デフォルトの名無しさん
:03/04/20 20:36
>>272
まだよくわかってないんじゃない?
とりあえず、
Car.engine.GetType();
なんて、メンバ変数(この場合engine)が公開されてる
時点でおかしい
274
名前:
デフォルトの名無しさん
:03/04/20 20:56
悪い例がCar.engine.GetType(); で
Car.GetEngineType(); が良い例です。
これでも駄目ですか? engineは隠蔽されていると思うのですが・・
275
名前:
デフォルトの名無しさん
:03/04/20 21:02
Car.GetType(ENGINE);
276
名前:
270
:03/04/20 21:08
>>275
ENGINEは定数ですよね?
Carクラスの中で、定数ENGINEを定義して、それを公開するということですか。
GetEngineType(); と同じ気がするんですが・・・気のせいですか?
自分の無知さが恥ずかしいです。
277
名前:
デフォルトの名無しさん
:03/04/20 21:11
Carの定義もEngineの定義も見ずに良いとか悪いとか言ってる奴は信用できない。
278
名前:
デフォルトの名無しさん
:03/04/20 21:12
class Car{
public:
Engine &GetEngine(){ return engine; }
}
279
名前:
デフォルトの名無しさん
:03/04/20 21:20
まず、engine の型を外部から知る必要がある設計が駄目。
どうしても知る必要があるなら、
>>274
の Car::GetEngineType() でいい。
280
名前:
デフォルトの名無しさん
:03/04/20 21:24
誤解を招いたかもしれませんが、
GetEngineType() とは型番とか、製造社とかを返すつもりで使いました。
例がとっさにうかばなかったもので・・・
281
名前:
デフォルトの名無しさん
:03/04/20 21:28
>まず、engine の型を外部から知る必要がある設計が駄目。
んなこたないよ。そんなの普通にあるだろ。
282
名前:
デフォルトの名無しさん
:03/04/20 21:28
>>280
その型番とか製造社を使って、
Carクラスの使用者は条件分岐したりするの?
283
名前:
デフォルトの名無しさん
:03/04/20 21:30
>>281
なにそれ。
if( car.GetEngineType() == HONDA ) {
car.アクセルを緩める();
} else {
car.アクセルは固定();
}
とか、こんなコード書くのか?
284
名前:
270
:03/04/20 21:35
>>282
そうですね。使うとしたら・・表示させたり、条件分岐とかですかね。
さきほど言いましたけど、
とっさに考えた例なので、使い道は考えていません^^;
285
名前:
デフォルトの名無しさん
:03/04/20 21:37
そもそもメンバ変数は公開/非公開どちらにすべき?って質問だよね。
"is-a"の話の流れで書いちゃってるけども、"is-a"の話とは関係ないよね。
286
名前:
270
:03/04/20 21:38
if(car.GetEngineType() == YAMAHA)
car.PointUp(1);
ヤマハのエンジンだったら評価を上げるっていう例です。
さっき思いつきましたが
287
名前:
デフォルトの名無しさん
:03/04/20 21:41
>>283
多態を使うべき場面っぽいですなー
288
名前:
デフォルトの名無しさん
:03/04/20 21:44
おまいらdynamic_cast知らんの?
289
名前:
デフォルトの名無しさん
:03/04/20 21:45
各々がいろんな場面想定して書いてるからまとまらないのな
290
名前:
デフォルトの名無しさん
:03/04/20 21:47
dynamic cast 知りません。
名前だけ知ってる・・・
291
名前:
デフォルトの名無しさん
:03/04/20 21:49
多態って?
292
名前:
デフォルトの名無しさん
:03/04/20 21:49
>>291
検索してくたたい。
293
名前:
デフォルトの名無しさん
:03/04/20 21:52
ごめん。多種・多様しかC++の特徴として覚えてなかった。
やっぱ一緒だった。タタイ?
294
名前:
デフォルトの名無しさん
:03/04/20 21:54
>>273
はおかしくない。
295
名前:
デフォルトの名無しさん
:03/04/20 22:05
ポインタを理解できないと
プログラムは組めないと言うよりアプリが作れない。
ポインタを理解するのに数年はかかると言われている。
本当のところ、どうなの?
296
名前:
デフォルトの名無しさん
:03/04/20 22:09
>>295
ポインタはすぐに理解できるよ。
297
名前:
sage
:03/04/20 22:11
アセンブラを習得したら完全に理解できるよ。
アセンブラ習得するのに、数年もかからんでしょ。
298
名前:
デフォルトの名無しさん
:03/04/20 22:12
>>295
たかがポインタに大げさだなあ
299
名前:
デフォルトの名無しさん
:03/04/20 22:20
>>298
関数ポインタはどんな場合に使うの?
300
名前:
デフォルトの名無しさん
:03/04/20 22:25
>>299
どの関数をコールするのかを、実行時に決める時に使う。
C++では、virtual関数やtemplateをうまく使えば使わなくてすむ。
つか、
>>299
よ、なぜ
>>298
に対して聞くんだ。
301
名前:
デフォルトの名無しさん
:03/04/20 22:26
"is-a"について質問ですが、
"手牌"と、"牌1つ"は"is-a"ですか?"has-a"ですか?(麻雀用語ですみません。)
class HAI{
private:
移動用クラス;
数値用クラス;
};
class TEHAI{
private:
HAI m_hai[14];
};
みたいにしたいんですが、
手牌の中には牌が14枚あるということから、"is-a"としたんですが・・
HAIクラスのメンバにTEHAIクラスからアクセスするのに長々と
TEHAI.GetHai(N番目).移動用クラス.ひっくりかえす(); みたいに書かないといけないですか?
まだよくわかってないみたいですか?
付け加えると、移動用クラスは、別のプログラムでも使えるようにと
汎用化したつもりなんですが。
長々とすみません。
302
名前:
デフォルトの名無しさん
:03/04/20 22:27
>>299
実装とインターフェイスの分離。多態(笑)
ってこれは概念も分からない人には少し早いんじゃないかな。
まずポインタの基本概念の理解の話なら、
自分の知識にあった説明さえ得られれば瞬時に理解できるんじゃないの。
C言語の複雑なポインタ式の知識は、あるに越したことないけどしっかり把握する
必要もあまりない(一般的に、複雑な式はバグの元なので避ける)
303
名前:
デフォルトの名無しさん
:03/04/20 22:28
>>299
>関数ポインタはどんな場合に使うの?
あれは、C++を使えない老人のオブジェクト指向ごっこ。
C++では使わない。その必要がない。
304
名前:
デフォルトの名無しさん
:03/04/20 22:30
>>300
298はポインタを理解してるとみた。
300は298ではないね。
信頼して聞いたんだよ。信頼と信用は違うけど。
305
名前:
デフォルトの名無しさん
:03/04/20 22:32
>>301
手牌は、特定のプレーヤーの管理下の牌の集合を保持したものである。
牌は、山に積むことができる。順番にツモって捨てられることができる。
鳴かれることができる。ドラ表示に使われることがある。
「手牌」は、「牌」の一種といえますか?
手牌は、「牌」の集合を所持するだけとしか思えませんが。
306
名前:
デフォルトの名無しさん
:03/04/20 22:36
>>303
必要がないわけじゃないよ。
関数メンバポインタがないからイベント通知にとても苦労してるよ。
overrideさせると切り替えが面倒だしそれ以外の解決法もぴったりのものはないからね。
307
名前:
デフォルトの名無しさん
:03/04/20 22:36
>関数ポインタ
WindowsならDLLからGetProcAddressするときに
308
名前:
デフォルトの名無しさん
:03/04/20 22:38
>>301
お前のコード、
「手牌 is a 牌」って表現してないだろ。
お前のコードは
「手配 has a 牌」っていうのを、14個分用意している。
自然言語に対する感覚をどうにかしろ。
そして is-a、has-aについて調べろ。
TEHAIクラスのpublicなメンバ関数は
”全部を引っくり返す”とか、
"手牌全部をみて、点数計算をする"とか、
"手配全部を見て、待ち牌をさがす"とか、
そういう、手配全部に対してアクセスする物と、
AddPai( class HAI* p ) // ツモ
removePai( int i ) // 牌を捨てる
とか、こんな感じで、手配の中の一牌をを
どうにかするメンバ関数の2種類を作れ。
あと、"移動用クラス"が何なのか知らねーが、
それは"引っくり返す関数"のなかでこっそり呼べ。
最後に、ストラテジーパターンについて学んでおけ。
309
名前:
デフォルトの名無しさん
:03/04/20 22:38
Templateがあるからvoid*は使わないって本当?
310
名前:
デフォルトの名無しさん
:03/04/20 22:38
ですよね!
でも長々と鎖をたどっていくのはいやなんですけど・・・スマートな
記述方法ってありませんか?
311
名前:
デフォルトの名無しさん
:03/04/20 22:39
>>309
ウソ。
312
名前:
デフォルトの名無しさん
:03/04/20 22:41
WNDCLASS 構造体に WndProc のポインタを設定したり
Enum〜 系の API にも関数ポインタ必要
313
名前:
デフォルトの名無しさん
:03/04/20 22:41
>>309
ホント。
314
名前:
デフォルトの名無しさん
:03/04/20 22:42
>>306
virtual関数使やいいだろ。
C++は多重継承を許す言語だぜ。
315
名前:
デフォルトの名無しさん
:03/04/20 22:42
>>309
ウソ。
template があってもなくても、void * は使わない。
template があってもなくても、マシンを直接アクセスしなきゃならないときは
void * を使わざるを得ないこともあるから、その場合だけ使う。
316
名前:
デフォルトの名無しさん
:03/04/20 22:45
>>308
ありがとうございます。
もう一度調べてみます。
317
名前:
デフォルトの名無しさん
:03/04/20 22:46
>>314
通知イベントが数十あって必要なものだけイベントハンドラ書いて
実行時にイベントハンドラ切り替えたりイベントハンドラ複数登録したり
とかはどうやってやる?
318
名前:
デフォルトの名無しさん
:03/04/20 22:46
>>310
std::for_each() 使えば?
319
名前:
デフォルトの名無しさん
:03/04/20 22:47
もともと、void *っていつ使われるんだろう。
mallocとかの返り値が void * だけど、
他にvoid *って使う価値がないような気がする。
"指しているオブジェクトが何か解らないポインタ"の使い道...
ん-...
>>315
マシンを直接アクセスするとき?void *がどう役に立つの?
320
名前:
デフォルトの名無しさん
:03/04/20 22:47
>>317
std::map<Event,Handler>じゃないの?
321
名前:
デフォルトの名無しさん
:03/04/20 22:49
>>319
memcpy使ったこと無いのか?
322
名前:
デフォルトの名無しさん
:03/04/20 22:53
>>321
ああ、そうか、memなんとか系のライブラリ関数では使われることがあるのか。
mallocもそうだけど、c++じゃあんまり使う機会がなさそうだな。void *
323
名前:
デフォルトの名無しさん
:03/04/20 22:54
>>322
うん。ほとんど使う機会がない。ガンガン使っているとしたら設計に問題があるかも。
324
名前:
デフォルトの名無しさん
:03/04/20 22:55
>>322
templateがあるからな。
325
名前:
デフォルトの名無しさん
:03/04/20 22:55
>>324
template は関係ない。
326
名前:
デフォルトの名無しさん
:03/04/20 22:58
>>320
やってみればわかるけど死ぬほど面倒だよそれ。
327
名前:
デフォルトの名無しさん
:03/04/20 23:00
>>317
Event - Listener モデル使えば?
328
名前:
デフォルトの名無しさん
:03/04/20 23:00
>>325
memcpyじゃなくてstd::copyを使うってことだと思うが、関係ないのか?
329
名前:
デフォルトの名無しさん
:03/04/20 23:02
>>317
たとえばイベントがn個あるなら、
class EventListener {
virtual handleE_0() = 0;
virtual handleE_n() = 0;
};
みたいなクラスを作って、イベントの影響を受けるクラスで、
これを実装しておけばいいだろ。
330
名前:
320
:03/04/20 23:02
>>326
どの辺が?
331
名前:
デフォルトの名無しさん
:03/04/20 23:03
>>319
知らず知らずのうちに使っているはず。
抽象化や隠蔽化する際にはとても重要だ。
たとえば、もしキミがGetModuleHandleを直接または間接に呼び出したとする。
ハイ、使いましたね。 → typedef void * HMODULE
でもGetModuleHandleを呼ぶとき、モジュール構造体がどうなっているかなんて
考えないでしょ?
たとえば、もしキミがCreateProcessを直接または間接に呼び出したとする。
ハイ、使いましたね。 → typedef void * HANDLE
でもCreateProcessを呼ぶとき、オブジェクト構造体がどうなっているかなんて
考えないでしょ?
たとえば、もしキミが...(以下省略)
いっぱいあるよ。
332
名前:
デフォルトの名無しさん
:03/04/20 23:04
#define STRICT
333
名前:
デフォルトの名無しさん
:03/04/20 23:08
memcpy??mem??????????
????????????????????????????????
???memcpy()?????????????
?????????????????????????????
memset()????"????????????????"????????????
???????
334
名前:
デフォルトの名無しさん
:03/04/20 23:08
>>328
std::copy を使っても、シーケンスの operator=() で memcpy が使われているかも
知れないし、std::copy を使わなくても、unsigned char * としてバイナリ・イメージを
コピーすることはできる。
ようは、void * と template とは関係がない。
335
名前:
デフォルトの名無しさん
:03/04/20 23:08
>>333
なんで?になってるの?
336
名前:
デフォルトの名無しさん
:03/04/20 23:09
>>331
Windowsに偏ってるのがイマイチだ。
337
名前:
デフォルトの名無しさん
:03/04/20 23:10
HMODULE や HANDLE がどう typedef されていても、関係のない話だね。
338
名前:
333
:03/04/20 23:11
うがー
339
名前:
デフォルトの名無しさん
:03/04/20 23:12
>>330
>329
のようなクラスの定義・登録・呼び出し・スコープの制御もろもろ全部。
イベント通知・受信のメカニズムが全部むき出しだからとても煩雑になる。
340
名前:
デフォルトの名無しさん
:03/04/20 23:12
>>334
そうか?漏れがmemcpyを使わなくなった理由はstd::copyがあるからなんだが。
だいたい、「operator=() で memcpy が使われているかも知れない」からって、
void*を使ってることにはならんだろ。
341
名前:
デフォルトの名無しさん
:03/04/20 23:13
Cで使われるって前提なのもイマイチだ
342
名前:
デフォルトの名無しさん
:03/04/20 23:14
どうやら老人が紛れ込んだようだな。老人 ==
>>317
343
名前:
デフォルトの名無しさん
:03/04/20 23:15
C++使いにとって、Cで書かされることほど屈辱的なことはない。
344
名前:
デフォルトの名無しさん
:03/04/20 23:15
>>340
std::copy() が使えるってことは、= 演算子が使えるってことだよね。
なら、memcpy() なんて使わずに、ループでコピーしておけばいいんじゃない?
std::copy() が使えない C でもそれでいけるよ。
345
名前:
301
:03/04/20 23:15
>>308
"is-a" と "has-a"を間違って書いてました。
>「手配 has a 牌」っていうのを、14個分用意している。
これって駄目ですか?
>ストラテジーパターンについて学んでおけ。
なかなかインターネットで見つかりません^^;
googleで検索しても数件しかヒットしませんでした。
本屋で、デザインパターンについて調べたら見つかりそうですか?
移動用クラスってのは、行列をたくさん集めたやつです。
・回転用行列
・移動用行列
・拡大用行列
ってかんじです。
別に「牌クラス」に記述する必要はあまりないですね・・・
クラスの外に宣言してやってみます。
346
名前:
デフォルトの名無しさん
:03/04/20 23:17
>>331
CreateProcess() で得られたものと GetModuleHandle() で得られたものって、
同じようにアクセスしていいの?
つか、"抽象化"って言葉の意味や"隠蔽"の概念は知っているの?
347
名前:
デフォルトの名無しさん
:03/04/20 23:18
>>339
はヴァカという結論で、よろしいか?
348
名前:
デフォルトの名無しさん
:03/04/20 23:20
>>347
MFCの解説でも読んで、自分が実装してる気になってんだろ。春だしな。
349
名前:
デフォルトの名無しさん
:03/04/20 23:20
Delphiならこんな議論は起こらないのに(ぼそっ)
350
名前:
デフォルトの名無しさん
:03/04/20 23:20
C++ではvoid*ってあまり使わないね、って話の時にWin32APIの話出されてもあまり説得力が・・・
351
名前:
デフォルトの名無しさん
:03/04/20 23:20
C#ならこんな議論は起こらないのに(ぼそっ)
352
名前:
デフォルトの名無しさん
:03/04/20 23:20
MFCなんて使う気にならないんですが、病気ですか?
353
名前:
320
:03/04/20 23:22
>>339
そういう話なら、mapを実装に使うクラスでラップすればいいだろ。
もとの話し見たら、「仮想関数あるから関数ポインタいらね」って話だったのね。
確かに、仮想関数だけじゃHandler型の実装には役不足だなぁ。
しかし、実装に使うにしても「関数ポインタ」が
表に現れないように実装するのがマナーだろうな。
354
名前:
デフォルトの名無しさん
:03/04/20 23:22
>>345
has-aで表現することは正しい。
355
名前:
デフォルトの名無しさん
:03/04/20 23:23
C++使いの皆さんに質問です。
MFCは"なんちゃってC++"なのはともかく、WTLはどう思いますか?
MFCよりもマシなC++の使い方してると思いますか?
356
名前:
デフォルトの名無しさん
:03/04/20 23:24
Win32 API は、非 OOPL からでも使えるように、クラスになっていないから void *
が出てきちゃったりするんだね。
C とかから API アクセスできなくてもいいんなら、Win32 API を OO で設計することが
できるから、void * なんて出てきやしないよ。
357
名前:
デフォルトの名無しさん
:03/04/20 23:27
OO で設計するときに、非 OO なライブラリとリンクしなきゃならないときに、
void * が出てくる可能性は高くなる。だって OO じゃないから。
358
名前:
デフォルトの名無しさん
:03/04/20 23:28
マシでもクソでもATL/WTLはCOM扱う時に楽だ
359
名前:
デフォルトの名無しさん
:03/04/20 23:29
COM 扱うなら、BCB の COM の取り込みで VCL コンポーネントにラップしちゃうのが
もっと楽だ。
360
名前:
デフォルトの名無しさん
:03/04/20 23:31
いや、COMは扱わなくて良いです。ただのWinアプリを作るライブラリとしてのATL/WTLで。
361
名前:
デフォルトの名無しさん
:03/04/20 23:31
データ構造を隠蔽化して機能をエクスポートするようなDLLを
作ったことがない達人気取りの厨房は、ママのおっぱいでも飲んで早く寝なさい。
...全く信じられんな、こいつらは。
どうせVBやDelphiで作っても大して変わらないようなGUIアプリしか
作ったことないんだろうな。...可哀想に。
合掌。
362
名前:
デフォルトの名無しさん
:03/04/20 23:31
もうGUIまわりはなんでもいいと思うのはまちがですか?
363
名前:
デフォルトの名無しさん
:03/04/20 23:33
>>361
が何逝ってるかわからないのでつが。
364
名前:
デフォルトの名無しさん
:03/04/20 23:33
>>363
やっぱり厨房だな
合掌。
365
名前:
340
:03/04/20 23:33
>>344
なるほど、そうだな。
366
名前:
デフォルトの名無しさん
:03/04/20 23:34
DLLを作ったことがないのが達人?
DLLを作ったことがあるのが達人?
DLLを作るのって、そんなにすごいの?
367
名前:
デフォルトの名無しさん
:03/04/20 23:36
>>361
>> ...全く信じられんな、こいつらは。
>> どうせVBやDelphiで作っても大して変わらないようなGUIアプリしか
>> 作ったことないんだろうな。...可哀想に。
開発環境に強く依存するようなGUIアプリを開発すると幸せになれるんですか?
368
名前:
デフォルトの名無しさん
:03/04/20 23:36
DLLを作るのがすごいことだと思っている厨房です。
369
名前:
デフォルトの名無しさん
:03/04/20 23:36
>>366
全然すごくないが、少なくとも
>>361
の言うようなDLLを作るときには、
void*や関数ポインタがよく出てくる。
370
名前:
デフォルトの名無しさん
:03/04/20 23:37
>>366
単にDLLを作るだけならマニュアルを読む能力があるかどうかぐらい
371
名前:
デフォルトの名無しさん
:03/04/20 23:38
もひとつ言うと、たとえば、
>データ構造を隠蔽化して機能をエクスポートするようなDLL
なんだか覚えたての言葉を無理に使ってるようで、微妙に変だが、
「データ構造を隠蔽して機能をエクスポート」してないDLLってあるの?
ちょっといじめすぎちゃったかな、俺?
372
名前:
デフォルトの名無しさん
:03/04/20 23:38
大漁だ(藁
373
名前:
デフォルトの名無しさん
:03/04/20 23:38
>>371
変数dllexportしまくりなDLLとか(藁
374
名前:
デフォルトの名無しさん
:03/04/20 23:39
あ、
>>363
==
>>366
==
>>371
です。
375
名前:
デフォルトの名無しさん
:03/04/20 23:41
>>355
の話題と混同したのかな?
376
名前:
デフォルトの名無しさん
:03/04/20 23:48
「C++は便利」という結論でよろしいか?
377
名前:
デフォルトの名無しさん
:03/04/20 23:51
「propertyとdelegateとdynamic class loadingがないので糞。
その不便さに気づいてない奴も糞。」という結論でよろしいか?
378
名前:
デフォルトの名無しさん
:03/04/20 23:52
君が去ってくれるなら、それでいいよ。
379
名前:
デフォルトの名無しさん
:03/04/20 23:53
もともとのDLLって、C++じゃなくてCを基準に作られてるだろ。
まずいのはDLLの仕様であってC++ではないと思う。
ぼろが出るといやなんであんまり具体的には書かんが。
380
名前:
デフォルトの名無しさん
:03/04/20 23:55
>>301
http://member.nifty.ne.jp/yamazaki/doc/cpp_design_pattern.html#Strategy
381
名前:
デフォルトの名無しさん
:03/04/20 23:55
>>379
じゃあ俺がぼろを出す覚悟で代わりに書いてやるよ。
382
名前:
デフォルトの名無しさん
:03/04/20 23:56
>>353
Qtのsignal/slotなんてのは、関数ポインタへの回帰だと
思うが。クラス単位でなく、オブジェクト単位での関係
を表したい時は、やっぱり関数ポインタの方が直観的
だし、既存の継承階層をいじらずに済むだけ柔軟性も
高いと思う。
383
名前:
デフォルトの名無しさん
:03/04/21 00:02
仮にDLLをクラスをexportできるような仕様に変えられるとしても、
言語やコンパイラによる縛りが関数単体でexportしている現在より強く出てしまうのではないかなあ。
関数だけだと、呼びだし規約程度しか迷うところが無いけど、
クラスだと、VMTのレイアウトやnew/deleteの挙動を揃えないといけないから。
384
名前:
デフォルトの名無しさん
:03/04/21 00:04
>>383
COM はそうなっている。
385
名前:
デフォルトの名無しさん
:03/04/21 00:04
「VC++.NETに移行すれば万事解決」という結論でよろしいか?
386
名前:
デフォルトの名無しさん
:03/04/21 00:04
>>383
その new や delete の、クラスごとに異なる部分って言うのは、
どこに揃えられると期待してますか?
387
名前:
デフォルトの名無しさん
:03/04/21 00:08
>>383
エクスポートされたクラスのユーザが、そのクラスのVMTのレイアウトまで
知る必要があるの?
COMを使うのってそんなに大変?
388
名前:
デフォルトの名無しさん
:03/04/21 00:09
最後の1文は
>>384
へ。
389
名前:
デフォルトの名無しさん
:03/04/21 00:10
>>386
Windows ならこれで OK。
template<class T>
class myallocator<T> {
IMalloc *pMalloc;
public:
myallocator() { CoGetMalloc(&pMalloc); }
~myallocator() { pMalloc->Release(); }
allocate(...) { return pMalloc->Alloc(...); }
deaclloacte(...) { pMalloc->Free(...); }
};
390
名前:
デフォルトの名無しさん
:03/04/21 00:11
>>387
大丈夫です。Windows 上の VTABLE は事実上 COM 規格で統一されています。
391
名前:
デフォルトの名無しさん
:03/04/21 00:17
>>390
GNAT(gccのAda)のVTABLEは、少しずれる(先頭に8バイトのメタクラス情報が入る)ので、
直接COMを使えませんでした…。
(C++と関係無い話でごめん)
392
名前:
デフォルトの名無しさん
:03/04/21 00:18
>>391
こんな感じですかね。
http://www.tietew.jp/cppll/archive/1907
393
名前:
デフォルトの名無しさん
:03/04/21 00:22
>>386
Xerces-C の XMLString::release() の実装を見ればわかりますよ。
394
名前:
デフォルトの名無しさん
:03/04/21 00:22
>>389
コピーしたらあぼーん。
395
名前:
デフォルトの名無しさん
:03/04/21 00:22
>>392
そうそう。(探してた情報が…サンクス)
あれ?ということは、Adaに限らずgccを使った場合はC++もダメ?
396
名前:
デフォルトの名無しさん
:03/04/21 00:22
おまえら、Tietewタソのコピペを、あたかも自分で考えたかのように語るのは勘弁してくだちい。
そんくらいにしとかないとぶっ殺しますよ。
つか、最低限、引用しろやコピペ野郎。その上、わざわざageで? 馬鹿じゃねえの?
397
名前:
デフォルトの名無しさん
:03/04/21 00:30
>>395
だめですね。
398
名前:
デフォルトの名無しさん
:03/04/21 00:30
>>396
名無しに名無しで何言ってんだ。
「おまえら」ってことはコピペが複数あんのか?どれがコピペ?
自分で考えたかのように語って誰かが得したり損したりするほどの内容は見当たらないが。
本人が「見て見て〜」ってageで書いてたりしたら面白いな。
399
名前:
デフォルトの名無しさん
:03/04/21 00:32
>>398
ネタにネタレスカコワルイ!
400
名前:
デフォルトの名無しさん
:03/04/21 00:36
誰かがMINGW32でDirectXを使っていたような…
lpDirectDraw->lpVtbl->Release(lpDirectDraw);とかやっていたのだろうか
401
名前:
談
◆TJ9qoWuqvA
:03/04/21 05:27
.
402
名前:
デフォルトの名無しさん
:03/04/21 08:41
このスレは終了しました。
403
名前:
デフォルトの名無しさん
:03/04/22 14:01
C++が非手続型言語といわれる意味がわからない。
Cが手続型言語といわれる意味はなんとなくわかる。
だけど俺にはC++ってのはCにクラス機能が付いた程度にしか
思えないので、どうしてそれが非手続型なのかがわからない。
どなたかわかりやすく教えてくれろ。
404
名前:
デフォルトの名無しさん
:03/04/22 15:26
>>403
> C++が非手続型言語といわれる意味がわからない。
どこに書いてあるのでしょか
405
名前:
デフォルトの名無しさん
:03/04/22 16:12
>>403
とりあえず、憂鬱本でも読んどけ
406
名前:
デフォルトの名無しさん
:03/04/22 16:14
templateは関数型っぽいけど、基本的に手続き型じゃないの?
"非手続型"ってじゃあ何型なんだ
407
名前:
デフォルトの名無しさん
:03/04/22 16:23
>>400
IDirectDraw_Release(lpDirectDraw) みたいにマクロが用意されてる。
408
名前:
デフォルトの名無しさん
:03/04/22 16:42
>>403
それがわかったところでなにかうれしいことがあるかい?
漏れにはどうでもいいことだとしか思えないが
409
名前:
デフォルトの名無しさん
:03/04/22 17:01
>>408
死ね
410
名前:
デフォルトの名無しさん
:03/04/22 17:46
>>409
つうほうしといたよw
あーあww
死ねとか逝っちゃたねwww
ひろしにIP提出されてタイーホwwww
みじめだねーwwwww
411
名前:
デフォルトの名無しさん
:03/04/22 18:17
ひろし、って誰だよ。
さくらももこの父親か?
412
名前:
デフォルトの名無しさん
:03/04/22 19:18
ひろしかよ
413
名前:
デフォルトの名無しさん
:03/04/22 19:28
管理人っていうか、IPを見れる権限がある人の一人だよ。
414
名前:
デフォルトの名無しさん
:03/04/22 19:38
スーパーハカーキターーーーーーーーーーーーーーーーーーーー!!!!
415
名前:
デフォルトの名無しさん
:03/04/22 19:40
ハッシュテーブルは標準化されてないってホントですか?
416
名前:
デフォルトの名無しさん
:03/04/22 20:03
ぬるぽも標準化してください
417
名前:
デフォルトの名無しさん
:03/04/22 20:38
namespace std{
typedef NullPointerExeption Nullpo;
class ( ´∀`){
public:
Nullpo* ぬるぽ(){
return hammer_cast<Nullpo*>( ガッ );
}
}
418
名前:
デフォルトの名無しさん
:03/04/22 22:14
唐突で申し訳無いけど、ちょっと質問。
今VC++でWin32のアプリを作っているんですが、その自身の中で、
「自分のファイルネーム」って、どうやって取得したらええんでしょうか。
419
名前:
デフォルトの名無しさん
:03/04/22 22:21
一番目のパラメータにNULLをセットし、モジュールの名前をゲットします。
420
名前:
デフォルトの名無しさん
:03/04/22 22:36
(´-`).。oO(というかVCスレかWin32APIスレで聞けよ‥‥
ちなみにBCBだとApplication->ExeNameに入ってたり‥‥)
421
名前:
418
:03/04/22 22:41
>>419-420
そスね。失礼。
422
名前:
デフォルトの名無しさん
:03/04/23 19:52
変数から、その変数の型を取得することって出来ますか?
423
名前:
デフォルトの名無しさん
:03/04/23 19:58
>>422
typeidでgoogle
424
名前:
422
:03/04/23 20:37
>>423
ありがとうございます
425
名前:
デフォルトの名無しさん
:03/04/23 21:22
VisualC++6.0は-GXオプションをつけないと例外処理が有効にならないみたいなんですけど、
デフォルトで例外処理機構を有効にすると、なにか不都合なことがあるんでしょうか。
最適化の妨げになるとか・・・
426
名前:
デフォルトの名無しさん
:03/04/23 22:45
>>425
心配するな、お前が考えている「例外処理」は常に有効だ。
(なんでヘルプを読まんのか...。)
427
名前:
デフォルトの名無しさん
:03/04/23 22:56
>>426
cl /?とやっても-GXに関するヘルプは表示されないけど。
428
名前:
デフォルトの名無しさん
:03/04/23 22:57
/GXならでるけど、「enable C++ EH (same as /EHsc)」って何よ!? ExceptionHanler?
429
名前:
デフォルトの名無しさん
:03/04/23 23:02
しかたないからごみの山からMSDNライブラリを出してきて見てみた。
このオプションは、extern C 関数が例外をスローしないと想定して、同期例外処理を有効にします。これは、/EHsc と同じです。
はぁ・・・よくわかんね。
430
名前:
デフォルトの名無しさん
:03/04/23 23:09
>>427-428
-GXと/GXは同じだ馬鹿
431
名前:
デフォルトの名無しさん
:03/04/23 23:37
>>429
よくわからないなら、まだお前には関係ないということだ。
そのままにしておくのが吉。
432
名前:
デフォルトの名無しさん
:03/04/23 23:38
-GXはうざい警告を消すためのものと覚えておけばいいね。
433
名前:
デフォルトの名無しさん
:03/04/24 00:41
/GundamX
434
名前:
デフォルトの名無しさん
:03/04/24 00:57
http://210.153.114.238/img-box/img20030423224051.jpg
435
名前:
デフォルトの名無しさん
:03/04/24 10:05
>>418
argv[0]
436
名前:
デフォルトの名無しさん
:03/04/24 10:47
http://210.153.114.238/img-box/img20030424082109.jpg
どうやって組めば良いですか??
437
名前:
デフォルトの名無しさん
:03/04/24 10:52
>>436
それで合ってる。問題ない。
438
名前:
デフォルトの名無しさん
:03/04/24 11:03
>>436
は見てないけどあちこちにあるからきっとブラクラ
439
名前:
デフォルトの名無しさん
:03/04/24 11:09
>>438
は押す事もできないヘタレの癖にあちこちで同じコメントしてる腰抜けインポ野郎
440
名前:
デフォルトの名無しさん
:03/04/24 11:10
>>436
むしろこっちが聞きたい
強いて点をつけるなら満点だよ 自信持て
441
名前:
デフォルトの名無しさん
:03/04/24 11:12
マルチのくせに偉そうだな(w
442
名前:
デフォルトの名無しさん
:03/04/24 11:19
>>441
=マルチポスト
443
名前:
デフォルトの名無しさん
:03/04/24 11:29
>>436
がマルチなんだからレスもマルチになるよ。当然。
444
名前:
デフォルトの名無しさん
:03/04/24 13:02
書き込み違反の例外ウィンドウが出てしまいます。
string s1="abcdefg123456789";
char *c1;
s1.copy(c1,6,0);
どうしてでしょう。
どうかよろしくお願いします。
445
名前:
デフォルトの名無しさん
:03/04/24 13:19
c1が何もさしてないじゃん
446
名前:
444
:03/04/24 13:54
>>445
レスありがとうございました。動くようになりました。
447
名前:
デフォルトの名無しさん
:03/04/24 18:18
質問ばかりですみません。
string s1="";
string s2="";
string vs1="abcdefg123456789";
char *c1;
c1 = (char *)s1.c_str();
vs1.copy(c1,6,0);
s2=s1;
s1のなかには"abcdef"が入っているのに、s2の中身は""です。
なぜなのでしょうか?
448
名前:
デフォルトの名無しさん
:03/04/24 18:24
>>447
なんでc_strがconst char*を返すのか考えろ。
s1.c_str()が返すポインタの先にたまたまメモリが確保されてただけの話。
449
名前:
デフォルトの名無しさん
:03/04/24 19:22
>>447
俺も前それやったが、
vs1.copyの行で、そういう風にコピーすると s1の領域(size)が変更されない
(しかも、s1文字列がNULLで終わるかどうかわからない)
ので、
s2=s1の行で最初に指定されたsizeの分しかコピーしない。
この場合だとNULL文字1文字分か、0文字しかコピーされないので
s2は""になる。
450
名前:
447
:03/04/24 19:45
>>448
レスありがとうございます。
亀レスすみません。長考してます。
>>449
なるほど。
451
名前:
447
:03/04/24 19:54
string s1="";
string s2="";
string vs1="abcdefg123456789";
int n=6;
char *c1=new char[n];
vs1.copy( c1,n,0);
s2=s1=c1;
これでできたみたい。これでいいのでしょうか。
ご迷惑をおかけいたしました。
452
名前:
デフォルトの名無しさん
:03/04/24 20:01
>>451
良いと言えば良いけど、何でそんなことする必要があるの?
substr使えばいいじゃん。
453
名前:
447
:03/04/24 20:02
そこまでいう理由はないだろ?
454
名前:
デフォルトの名無しさん
:03/04/24 20:05
別に言えとは言ってないがな。まぁ、がんがれ。
455
名前:
447
:03/04/24 20:08
>>452
うわ、そういうのあったのですね。しりませんでした。
>>453
は、
私じゃないですよ。
456
名前:
デフォルトの名無しさん
:03/04/24 21:51
このスレにも粘着のなりすまし荒らしがいるな……
質問する人はトリップ付けた方がいいと思うよ
捨てトリップでかまわないので
457
名前:
デフォルトの名無しさん
:03/04/24 22:51
>>447
なぜ、char*を使う必要があるのか疑問なのだが?
458
名前:
デフォルトの名無しさん
:03/04/24 23:07
せっかくstring使ってるのにねえ
459
名前:
447
:03/04/25 11:41
レスありがとうございます。
>>457
copyメソッドの引数の型がchar*だったのでって単純な理由なのですが。
>>458
その文の意味はつまり、substrを使えばいいのにってことで理解すればいいですか?
460
名前:
デフォルトの名無しさん
:03/04/25 12:25
>>459
基本的に同種のコンテナなら、それをそのままコピーするメソッドがあるから
stringの場合char*を使う必要はないと思われ。
substr使わなくても
string vs1="abcdefg123456789";
string s1( vs1, 0, 6);
か
string s1= "";
string vs1="abcdefg123456789";
s1.assign( vs1, 0, 6);
でいいんじゃない?
ところで、char* を引数にとるAPIにstring入れる場合て
int size = 10;
string str(size);
hoge_API( const_cast<char*>(str.data()), str.size() );
とかって、やったりしてるんだけど、やっぱテンポラリな配列なりなんなり作成して
ポインタ代入したほうがよろしいのでしょうか?
461
名前:
デフォルトの名無しさん
:03/04/25 17:37
ぼくはいつもnoge_API((char*)s.c_str(),s.c_str())ですが、コンストポインタのキャスト後の動作に保障はないんっでしたっけ?
462
名前:
デフォルトの名無しさん
:03/04/25 20:55
有馬線
463
名前:
デフォルトの名無しさん
:03/04/25 22:32
class AAA {
private:
int m_a;
public:
Set(int a){ m_a = a; }
};
class BBB {
private:
AAA m_aaa;
public:
AAA GetAAA(){ return m_aaa; }
};
class CCC {
private:
BBB m_bbb[100];
public:
Insert(int i){ m_bbb[i].GetAAA().Set(100); }
};
464
名前:
つづき
:03/04/25 22:33
クラスCCCのInsert()関数を実行してもクラスCCCのメンバのm_bbb.m_aaa.m_a
の値が変わりません。なぜでしょう・・・
テストにクラス中のprivate:をpublic:に変えて、
直接代入してみましたところ、ちゃんと値が変わりました。
どこかが致命的に間違っていると思うのですが、グーグルでは調べきれなかったので
皆様の力を貸していただきたいです。お願いします。
(かなり簡単化したので、このプログラム自体にあまり意味はありません。)
465
名前:
デフォルトの名無しさん
:03/04/25 22:38
> AAA GetAAA(){ return m_aaa; }
コピーを返しているから。参照返せ。
466
名前:
464
:03/04/25 22:40
あ、なるほど・・・
ありがとうございました^^
467
名前:
デフォルトの名無しさん
:03/04/25 22:52
>>464
クラスのメンバにクラスのインスタンスは持たせないほうがいいと思うが・・・。
比較的小さいのならともかく、 operator= の実装がめんどくさそうな位
でかいクラスなら、ポインタもたしたほうがよくないか?
468
名前:
464
:03/04/25 23:00
>467
あまりわかりませんが、
class CCC {
private:
BBB *m_bbb;
};
こういう風にするんですか?
よろしくお願いします。
469
名前:
467
:03/04/25 23:46
実際の実装は
BBB *m_bbb;
としてコンストラクタで
CCC::CCC(int n)
{
m_bbb = new BBB[n];
}
としていますが。
470
名前:
464
:03/04/25 23:47
464でした。
471
名前:
デフォルトの名無しさん
:03/04/26 02:58
467とは別人だけど…
>>470
ちゃんとメモリリークの対策してればそれでよいと思う。
データを共有しても問題ないのなら、
参照回数計測を実装したポンタのラッパークラスのテンプレートを使うとベターかな。
場合にもよるけど。
472
名前:
471
:03/04/26 02:59
ポンタってなんだよ…
ポインタですた。
473
名前:
デフォルトの名無しさん
:03/04/26 03:00
ああ、突っ込もうと思ったのに
474
名前:
デフォルトの名無しさん
:03/04/26 03:07
ポンタって良い感じだな。
475
名前:
デフォルトの名無しさん
:03/04/26 07:59
「インターフェースの継承」はいいけど「実装の継承」はだめって、
C++ではどういうことなんでしょう。
それとも、これって、Javaマンセー厨のごたく?
476
名前:
デフォルトの名無しさん
:03/04/26 08:33
>>475
言語は関係ない話だろ。
477
名前:
デフォルトの名無しさん
:03/04/26 09:05
>>476
で、どーゆー話?
478
名前:
デフォルトの名無しさん
:03/04/26 09:27
こんなはなし。
http://www.microsoft.com/japan/msdn/library/ja/vbcn7/html/vaconWhenUseInheritance.asp
http://www.microsoft.com/japan/msdn/library/ja/vbcn7/html/vaconWhenToUseInterfaces.asp
479
名前:
デフォルトの名無しさん
:03/04/26 09:30
>>475
「実装の継承」はダメって云われたら
private 継承の立つ瀬が無いような気がする。
480
名前:
470
:03/04/26 11:14
>>471
もちろんデストラクタで、delete [] m_BBB; で開放しています。
>参照回数計測を実装したポインタのラッパークラスのテンプレートを使うとベターかな。
どんな利点がありますか?
481
名前:
デフォルトの名無しさん
:03/04/26 11:22
>>480
デストラクタで、delete [] m_BBB; で開放する必要が無くなる
コピーコンストラクタを特に書く必要が無くなる
代入演算子を特に書く必要が無くなる
他いろいろ
482
名前:
デフォルトの名無しさん
:03/04/26 11:33
>>480
具体的な例は「プログラミング言語C++第3版」のP347以降を読むといいよ。
483
名前:
デフォルトの名無しさん
:03/04/26 11:34
BCB6で
PNGの解凍をしてGraphics::TBitmapで利用できる形にしたいのですが
GLDPNGは使用条件の関連でアウトなんで
何か簡単な方法ってないでしょうか?
読み込みだけでいいんで・・・
SUSIEも考えたんですが別途SUSIEプラグイン用意しろっていうのも
なんなんで・・・
よろしくおねがいします
484
名前:
デフォルトの名無しさん
:03/04/26 11:48
ここはBCBスレじゃない。
485
名前:
デフォルトの名無しさん
:03/04/26 11:52
>>484
スマソ・・該当スレが見つかったんでそちらに移動します
486
名前:
デフォルトの名無しさん
:03/04/26 13:35
>>478
つーか、それVBだからじゃねーの?
487
名前:
デフォルトの名無しさん
:03/04/26 18:18
「実装の継承」がどうのって言ってるのは、Java廚かブビ廚だけ。
C++の言葉にはない。
と言っておこう。
488
名前:
480
:03/04/26 18:22
>>481
,482
え、そんな便利なクラスがあるんですか・・・
作り方なんて載ってるHPなんてないですよね。
やっぱ本を買うしかないんですか。
親切にありがとうございました。
489
名前:
デフォルトの名無しさん
:03/04/26 18:28
>>488
boostを使うべし
ttp://www.boost.org
解説
ttp://www.kmonos.net/alang/boost/
490
名前:
488
:03/04/26 18:50
>>488
ありがとうございます。
やっぱり便利なものは世界の誰かが作ってるもんですね。
こういうライブラリって皆さん使ってるんですか?
ラッパークラスっていうぐらいだから、自分が作ったスーパークラスから
派生させたクラスだと思いました。
491
名前:
デフォルトの名無しさん
:03/04/26 19:18
C++最強のCSVライブラリって、プログラミング作法に
載ってる香具師でいいんですか?
492
名前:
デフォルトの名無しさん
:03/04/26 20:23
C++でC#のデリゲートに相当する機能って実現可ですか?
493
名前:
デフォルトの名無しさん
:03/04/26 20:27
可です。
494
名前:
デフォルトの名無しさん
:03/04/26 20:49
>>490
便利といえば便利だが、仕様をしらないで使ってるとはまるので気をつけるべし。
とりあえず、template、参照、継承あたりをきちんと理解してから使ったほうがいいと思われ。
あとは、キャストかな?
dynamic_cast,const_cast,static_cast,reintrupt_castとか大丈夫?
あと、stlが使えることが前提条件かな?
495
名前:
デフォルトの名無しさん
:03/04/26 20:54
> reintrupt_castとか大丈夫?
...大丈夫?
496
名前:
デフォルトの名無しさん
:03/04/26 20:59
>>495
再割り込みキャスト?
497
名前:
494
:03/04/26 21:02
reinterpret_castだね。
あんまつかわんから、大丈夫じゃねーや。
回線きって(略
498
名前:
デフォルトの名無しさん
:03/04/26 21:06
すいません。どなたかちょこっとおしえてください。
.NET Microsoft Framework SDK で、C言語のソースを
コンパイルする方法を教えてください。
499
名前:
492
:03/04/26 21:14
>>493
どうやればいいのかわかりませんがやってみます
ありがとうございます
500
名前:
デフォルトの名無しさん
:03/04/26 21:50
>>498
てきとーにパス通してDOS窓から
cl aiueo.c
>>499
boost::bind とか、あるいは std::mem_fun + std::bind1st とか。
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.