[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 07/16 11:48 / Filesize : 200 KB / Number-of Response : 824
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part61



1 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:37:43 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

267 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 01:12:43 ]
Humanクラスを基底クラスとするTanakaやAsouやIshikawaクラスがあるとします
Humanは抽象クラスとして用いるつもりです
このときHumanにあるstaticメソッドを一回だけ呼び出したいときってどうすればいいでしょうか?
Humanのコンストラクタで呼び出したとすると、TanakaやAsouのコンストラクタでも呼び出されますよね
static bool initのような変数をフラグとして使う方法は思いついたのですが、
もっとスマートな方法はないのでしょうか?

268 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 01:16:38 ]
シングルトンやそれに関わるC++の実装は非常に面倒くさくて
自分で一からやろうと思うとどうしても乱雑になる。
マルチスレッドが入ってくるともっと面倒くさくなる。

269 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 01:25:21 ]
>>260
人生、かな?

270 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 01:49:26 ]
>>267
そのメソッドを呼び出したいのは、Human派生のオブジェクトを生成したタイミングなの?

271 名前:267 mailto:sage [2008/03/25(火) 02:13:35 ]
>>270
そうですね
Human派生のオブジェクトを生成する前に呼び出しても構わないのですが

272 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 02:30:23 ]
>>271
であれば、全てが始まる前に自分で一度だけ呼ぶのが良いと思うな。

273 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 02:31:52 ]
>>272
それはstaticな変数をフラグにするよりダメじゃねぇかw

274 名前:267 mailto:sage [2008/03/25(火) 02:39:11 ]
>>272
あぁそうか、そもそもstaticなメソッドなわけだから

int main(){
   Human::onlyOnceCalled()

みたいなかんじで
最初の方で適当に呼んでおくってのもありかもしれませんね
一回だけしか呼ばないって保証がないような気もしますが

275 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 02:49:38 ]
>>274
必ず最初に読んでしまってよいなら、クラスにスタティックなメンバを定義して
それの初期化の中で実行させてみては?

// human.h
class Human() {
 // 中略
 class Initializer { Initializer() { onlyOnceCalled(); } };
 static Initializer init;
};

// human.cpp
Human::Initializer Human::init;

文法間違ってたらすまん



276 名前:275 mailto:sage [2008/03/25(火) 02:51:47 ]
Human::Initializerのコンストラクタがpublicになってないとか、いろいろダメだorz
そこは適当におぎなって

277 名前:267 mailto:sage [2008/03/25(火) 03:01:51 ]
>>275
なるほど。こういう方法もあるんですね
勉強になりました
ありがとうございました

278 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 03:05:20 ]
保証が欲しかったのか。失礼。
initialization orderを気にするならこんな感じかな。
class Human() {
class Initializer {
Initializer() { onlyOnceCalled(); }
public:
static void Initialize() { static Initializer instance; }
};
};

これで、Initializer::Initializeを呼んだタイミングで一度だけ初期化されるようになるよ。ただしこの場合は複数スレッドとかが動き出す前に呼んでね。

279 名前:260 mailto:sage [2008/03/25(火) 09:32:50 ]
ぇ?コンパイル通る?
gccだと通らないんだけど・・・

280 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 09:53:30 ]
>>279
どこを見てそう思うんだよ・・・
指摘してくれてるだろ
>>263
>>266
あとAcceptがReturnの返す一時オブジェクトを参照してるから何とかしよう

281 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 11:14:49 ]
>>279
まずは省略や手抜きをせずに、Bの定義を全部書け。
そして何をしたいのかはっきりさせろ。

282 名前:260 mailto:sage [2008/03/25(火) 16:02:29 ]
いや、やりたいことは下のやつを知りたかっただけ。
ja.wikibooks.org/wiki/More_C%2B%2B_Idioms/%E6%89%80%E6%9C%89%E6%A8%A9%E7%A7%BB%E5%8B%95%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF(Move_Constructor)
に書いてあることってnon-const referenceを受けるべきとろこに一時オブジェクトを渡せるって話だと思って、
渡してみたらコンパイラ通らないどーん。な状況。


283 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 16:44:42 ]
>>282
これで通った
struct B{
struct P{ B *temp; };
B(){}
B(P p){ swap( *this, *(p.temp) ); }
operator P () { P p; p.temp = this; return p; }
};
B Return(){ return B(); }
void Accept( B b ){};
int main(){ Accept( Return() ); }

284 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 17:14:20 ]
参照渡しから値渡しに変更した理由が分からん

285 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 17:18:44 ]
抽象クラスのメソッドの定義で質問があります
抽象クラスにおいて、自分自身のクラスへのポインタの引数を取るメソッドは不可能なのでしょうか?
たとえばこういうコードです
class Human {
  void foo(Human *human) = 0;
};

コンパイルエラーになってしまいますが、なぜそうなるのか分かりません
抽象クラスだから、インスタンスを作れないので
void (Human human);
のようなメソッドはだめですよね、でもポインタならいけると思うのですが




286 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 17:20:52 ]
B::operator P()の戻り値から構築されるBの一時オブジェクトは非const参照のAccept(B&)では受け取れないんじゃ?

287 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 17:23:26 ]
その発送は無かったわ、thisポインタというものが(ry
virtual書いてみたらどうかな?

288 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 17:27:02 ]
一時変数を値渡しする理由は?const参照にしない理由が分からない。

289 名前:285 mailto:sage [2008/03/25(火) 17:32:20 ]
>>287
すいません元のコードではvirtualをつけてました
thisポインタは分かるのですが、この抽象クラスを継承したクラスの間でやりとりしたいことがあるのです
不勉強なので間違ってるかもしれませんが、「関連」というのをやりたいのです。
>>285の例でやるなら、一般的にはHumanクラスにHuman *hoge;みたいなポインタをメンバに持たせて関連付けするそうですが
関数の引数でやれないかと思いまして

290 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 17:35:09 ]
>>288
const参照でもいいかもしれないけど、それ以上所有権を動かせなくならない?

291 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 17:45:20 ]
Acceptに入ってからも譲渡するなら、
void Accept(B& b) {}
B b = Return();
Accept(b);
の方が良くないかな、それ以前に何のためのPなんだ?

292 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 17:47:47 ]
>>285
どういう一般的例なのかちょっと分からないけど、
処理と情報を分ける実装の方が個人的にはスッキリするかな

んで、そのプログラムvirtualつけてエラーが出る理由が分からないんだけど…

293 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 17:49:24 ]
あぁ、失礼した、operator Pはconst守るようにしてるのね
ごめん、俺が悪かった

294 名前:292 mailto:sage [2008/03/25(火) 18:06:34 ]
>>292
すいませんすごく単純なクラスを作り直し、実験してみると、エラーはでませんでした。

「抽象クラスをインスタンス化することができません」というエラーメッセージだったので、
質問させていただいたのですが、おそらく他のところにエラー.の原因があると思うのでもう一度見直してみます

295 名前:294 mailto:sage [2008/03/25(火) 18:09:51 ]
>>294の名前欄は>>285の間違いです



296 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 19:45:31 ]
auto_ptrはauto_ptr_refクラスを介して対処している。
もう知っているかもしれないけど、
C++0xでは非const参照でも一時オブジェクトを受けられるようになる(右辺値参照)。

297 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:07:18 ]
move semantics と rvalue reference &&

298 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:23:46 ]
右辺値参照は何度もこのスレでも話されてるけど理解できん。

299 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:33:41 ]
エラー出る出る言うなら、同じエラーが出る小さいプログラムを示せよ。
BやらPやらの例も、そもそもswapがないでコンパイル止まるしな。


300 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:34:02 ]
右辺値及び左辺値(この二つは組)、参照の理解を固めてから見直すとよろし

301 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:45:08 ]
>>298
簡単に言うと「swapでおk」ってこと。


302 名前:260 mailto:sage [2008/03/25(火) 23:08:35 ]
おなにーでさーせん。swapとかごめん。あと別に必要なかったかも。
コンパイル通った。
>>283と一緒かな?

class D {
 public:
  struct Proxy { Proxy( D *d ):d_( d ){}; D *d_; };
  operator struct Proxy () { return Proxy( this ); };
  D( struct Proxy p ) {};
  void operator = ( struct Proxy p ){};
  D(){};
  D( D &rhs ){};
  void operator = ( D &rhs ){};
};

D Return() { return D(); }

int main( int, char** ){
D d = R();

return 0;
}

Accept( D &d );ってのは間違ってたかも。
ようは、
D( const D &rhs )だと、オーナーシップの移譲とかでrhsに変更加えられない。で、
D( D &rhs )だと、右辺値を渡せない。
だから、Proxyを返して、ごにょごにょする。って話なのか。

303 名前:デフォルトの名無しさん [2008/03/27(木) 00:31:14 ]
Cの関数ポインタにC++のClassの実体化した関数ていれられますか?
ビルドエラーが出るんですけど、そもそもそんなの出来ない?

304 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 00:54:49 ]
>>303
できない。
関数ポインタとメンバ関数ポインタは別物。

305 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 01:38:47 ]
>>303
Windowsのコールバック関数みたいに
こっちから引数を渡せれば、どうにでもできる。



306 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 01:54:41 ]
>>303
sizeofを使ってポインタサイズを調べてみると、あれびっくりサイズがデカイって分るよ。
どうやっても入りません、キャストしたら情報ロストします。

307 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 02:00:59 ]
>>306
いろいろ勘違いしてるような。

308 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 02:24:05 ]
>>307
どこを?
具体的にどうぞ。


309 名前:デフォルトの名無しさん [2008/03/27(木) 02:29:53 ]
>>304-306 のうち確実に間違っているのは >>305 です、要注意。

310 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 02:49:53 ]
面倒だからboost::functionを調べてみ >303

311 名前:デフォルトの名無しさん [2008/03/27(木) 02:56:20 ]
詳しく説明した方がいいかと
要するに、メンバ関数ポインタがさす関数はvirtualである事もあって
インスタンスに仕込まれた仮想テーブルを参照して、関数テーブルのうちどの位置にあるものかを取得する必要がある。
また、関数はvirtualでないケースもある、この場合仮想テーブルには関数のアドレス情報はないので、関数メンバポインタ内に情報がなければならない。
関数メンバポインタはこれら複合情報で構成された構造体となっている。


312 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 03:03:53 ]
どこが詳しいのか


313 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 06:03:12 ]
それなりに詳しいと思うけど、
であるがゆえに「要するに」から始まっているのは間違いだと思う。

314 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 07:26:14 ]
>>303
関数ポインタには入れられないが、
実体とメンバ関数ポインタの対を構造体にしたものを引数に取る
ラッパ関数を通して呼ぶことはできる。
もちろん、C 側ではその構造体を直接扱うことはできないから、
void * を通すなり不完全型を利用してポインタで扱うなりする必要はあるけど。

315 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 07:39:53 ]
>>309
>>305はCのライブラリのコールバック使うときとかの対処法の話じゃね?
大抵はvoid*のパラメータ持ってるし。



316 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 07:46:12 ]
virtual関係無いよね。

317 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 08:15:45 ]
そもそも、C++のclassの実体化した関数って何?実体化って何を言ってるんだ
インスタンス増えたら関数も増えるとか思ってるのだろうか、理解に苦しむ

www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/feature/jangrayhood/

318 名前:303 [2008/03/27(木) 08:50:26 ]
やりたいのは複数newしたクラスからCの関数叩くんですけどその時の引数にコールバック用のCの関数ポインタがあるんです
そしてその時呼んだ実体に関数ポインタによって帰ってくるようにしたいんです


319 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 09:03:26 ]
引数を加えて、static関数で良いんじゃ?

320 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 09:20:50 ]
>>317
非staticメンバ関数/インスタンスメソッドの事だとみんな理解してるよ。

>>318
コールバック関数のパラメタを汎用ポインタとかで指定できるなら、そこにオブジェクトのアドレスを入れて、コールバック関数内でキャストしてメンバ関数を呼ぶ。
パラメタを指定できないなら、コールバック関数から見えるスコープの変数にオブジェクトのアドレスを入れておき、コールバック関数からメンバ関数を呼ぶ。

321 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 10:10:15 ]
クラスの関数ポインタはthisが略されてるようなもんじゃね

322 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 10:31:11 ]
>>317
往生際が悪い、素直に自分の知識不足でしたと認めろ

323 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 11:13:55 ]
>>317
そのあたりは処理系依存だろ

324 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 13:09:21 ]
static メンバ関数を C のコールバックに登録するのってよく見るし実際に
やったこともあるんだけど、ほんとは extern "C" と extern "C++" の違いで
型が遭わないはずなんだよね。

だからって対応策がわかんないし、使ったことのあるコンパイラでは全部通るから
そのまま使っちゃうんだけどさ。

325 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 13:35:22 ]
>extern "C" と extern "C++"
"C" とかの修飾は、識別子を外部にどういう規則で公開するかという点についての指定であって、スタックフレームの作り方の指定ではない。
機種依存なので、そっちにいけと事になるが、cdeclとpascalが違えば "C" を付加しても動作しない。
C型のスタックフレームを持つ関数として登録可能な関数なら、C型のコールバックに登録する事ができるという事。
そうでないなら、コンパイルが通ったとしてもうまくいかない。



326 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 13:52:21 ]
>>325
スタックフレームとか実装に立ち入った話はしてない。言語概念上の型が違うんだよ。

327 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 13:53:59 ]
>>326
力いっぱいデタラメぶちかまさない

328 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 13:58:42 ]
知識不足は許容できるが嘘吐きになってはイカンぜよ

329 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 14:03:56 ]
>>327-328
気持ちはわかる。きっとみんなこれらは同じものとして使ってるだろうし、
動作も問題ないだろうさ。

でも規格ではエラーにならないとダメなんだよ。はっきり書いてあるから。

7.5 "Linkage specifications" p1 より
> ... Two function types with different language linkages are distinct types even
> if they are otherwise identical.

gcc でもバグ扱いだ。
gcc.gnu.org/bugzilla/show_bug.cgi?id=2316

330 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 14:06:37 ]
>>329
自分を嘘と虚栄で塗り固めるような真似はやめた方がいい、どこに突っ込み入っているのかすら理解できていないだろ。

331 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 14:10:44 ]
静的メンバ関数はextern "C++"ではない

332 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 14:11:10 ]
328は327に宛てたもんだと俺は思った、どうでもいいけど。

333 名前:329 mailto:sage [2008/03/27(木) 14:11:40 ]
>>330
ごめん。どこに突っ込み入っているのかすら理解できてない。
どこが嘘になってるの?

334 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 14:16:32 ]
>>331
何を根拠にそんなこと言うのか知らないけど、じゃぁ静的メンバ関数の
language linkage は "C++" 以外の何になるのさ?

335 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 16:56:26 ]
虚言癖というか妄想癖というか・・・なんかもう病気だね(汗



336 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 17:04:34 ]
>>334
静的メンバ関数のリンケージは内部リンケージで
その根拠は外部に公開されないから
逆にextern "C++"と同じという根拠は?

337 名前:デフォルトの名無しさん [2008/03/27(木) 17:05:02 ]
もうv(^・^)vの人はいないの?

338 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 17:20:53 ]
ちゃんと勉強しろ、そんな高度な話題じゃねぇよ

339 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 18:55:41 ]
コンストラクタの中で
配列宣言しているオブジェクトの
コンストラクタ引数を設定するにはどうしたらいいですか?

340 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 19:03:37 ]
class Test{
Test0 objects[10];
...
};

Test::Test()
:objects[0]( 10 )
,objects[1]( 8 )
...
{
}

こんなかんじをやりたいのです。
もちろん、これではエラーです

341 名前:デフォルトの名無しさん [2008/03/27(木) 20:36:48 ]
>>339
できないよ。

342 名前:デフォルトの名無しさん [2008/03/27(木) 20:51:07 ]
解答を待っているのかもしれないが、本当にできないから。
www.geocities.jp/ky_webid/cpp/language/012.html

343 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 20:57:51 ]
どうしてもそれっぽいことがやりたいなら
vector<Test>にひとつひとつpush_back()するか
ポインタの配列にしてひとつひとつnewすればいいんでないの

344 名前:デフォルトの名無しさん [2008/03/27(木) 21:55:56 ]
VC++6で
for(int i=0; i<10; i++){
...
}
for(int i=0; i<10; i++){
...
}
って書いたら
iの再定義っておこられた
拡張子cppになってるのに

345 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 21:57:25 ]
仕様です



346 名前:デフォルトの名無しさん [2008/03/27(木) 21:58:46 ]
1998年発売のソフトやもん。

347 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 21:59:23 ]
>>344
びっくりするくらいみんな知ってる。
規格準拠していないんだから何も問題ない。

348 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 22:01:35 ]
>>344
#define for if(0); else for

魔法のおまじない

349 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 22:01:59 ]
当時は準拠してたんだよ

350 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 22:03:21 ]
まだ規格もなかったのに何に準拠してたというのか。

351 名前:デフォルトの名無しさん [2008/03/27(木) 22:04:00 ]
常識。

352 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 22:29:04 ]
>324,329
だいたい、「関数ポインタ型」それ自体にはリンケージなんか無いだろ。
それともこーゆーコードが通るコンパイラでもあるのかっつーの。
typedef static void (*hoge)();
typedef extern void (*foo)();
typedef extern "C" void (*var)();

353 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 22:36:23 ]
typedef void (*__stdcall type)();

こういうのならたまにやる。

354 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 22:36:46 ]
それはリンケージじゃなくて呼び出し規約

355 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 22:48:31 ]
>>350
ARM、ISOのドラフト



356 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 22:49:53 ]
>>355
>>344 なていたらくでか

357 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 22:58:27 ]
>>356
forの中で定義した変数の有効範囲が
直後のループ本体に限られるようになったのは
結構遅かったのでは?D&Eでも軽く触れられていたし。

それに加え過去の互換性のためVC6はあれがデフォルトになったんだと思う。

358 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 23:27:37 ]
昔の人が考えた仕様には、頭おかしいだろうってのがそれなりに有るからね。

359 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 23:47:27 ]
初期のコンパイラの実装の都合もあったんじゃないかな?

最近のコンパイラで、forの変数の有効範囲が限られるようになってるのに最近気づいて思わずGJと叫んだ。


360 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 00:10:34 ]
>>357
まあ 1998 年と言えば規格が出る年だしな。
開発期間とか考えると多少前の仕様に準じようとしてたと考えるのが妥当だけど、
その時期ならドラフトとはいえかなりな部分まで練られてると思うんだけどな。
まあ、想像でしかないので本当にギリギリになって入れられた仕様なのかもしんないけど。

VC6 はテンプレートまわりがバグ持ちすぎてかなり酷いが、
テンプレートも遅くに入った仕様だからな・・・。
new がデフォで bad_alloc 投げないとか、とにかく色々と酷い上に、
しばらく次のコンパイラが出なかったという・・・。

361 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 00:18:58 ]
未だに古いライブラリとかで使わないといけないことが結構あるからねぇ
VS2005から入った俺としては結構苦痛
まあでもテンプレートさえなければインテリセンス反映が早いのはよい

362 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 00:36:24 ]
VC++6.0は当時の状況を考えればしょうがないと思う

問題なのは次のコンパイラがさっさと出なかった事
お陰で変に普及しちまって、このスレでもVC++6.0でコンパイルできません的な質問が絶えない

363 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 00:38:12 ]
全てはMSが次期製品を確実に買ってくれる為に図った陰謀。

364 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 00:53:13 ]
MSの事情的にはむしろ逆のような?
過去のシステムヘッダに, for で宣言した変数が
その後も生きることに依存したコードがあったっていう……

365 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 00:56:00 ]
#define for if(0) else for
のおまじないと使ったあとでATLをincludeすると
怒られるちゅーか



366 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 01:14:53 ]
>>363
そして満を持して登場した 2002 が糞だったという罠。
そして 2003 で大きく改善されるという二重の罠。
アカデミックだと無料アップグレードできないという三重の罠。

367 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 01:16:50 ]
#define for if(0); else for は色々やった後にやるとよろし。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<200KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef