- 1 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:37:43 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。
- 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 は色々やった後にやるとよろし。
- 368 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 01:55:57 ]
- ってかincludeする前にundefするだろ・・・
- 369 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 02:11:01 ]
- >>336,352
ややこしくて嫌になるが、内部とか外部とかがある「リンケージ」と "C" とか "C++" とかがある「言語リンケージ」("language linkage") とは 別物。 >324,329 が言ってるのは言語リンケージのほうなんで、話がまるで かみ合ってない。
- 370 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 03:12:43 ]
- 自信満々な>>336が可哀想に見えてきちゃったよw
逆にextern "C++"と同じという根拠は?ってのが哀愁をソソル
- 371 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 03:26:11 ]
- >>336
素の「リンケージ」の話だとしてもおかしい。静的メンバ関数のリンケージは ほとんど外部リンケージになる。例外は関数内のクラスのメンバの場合とかね。
- 372 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 03:29:08 ]
- 静的メンバ関数が「外部に公開されない」ってのもおかしいな。
クラスの宣言されたスコープや、クラス内での private なり public なりに 従うだろ、常考。
- 373 名前:デフォルトの名無しさん [2008/03/28(金) 03:50:38 ]
- びやーんはもうC++なんか使っていないらしい。
- 374 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 05:40:45 ]
- ソースは?
- 375 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 07:19:26 ]
- 2ch
- 376 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 08:03:31 ]
- >>372
public, privateと内部リンケージ, 外部リンケージはまた別の話だ
- 377 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 08:07:53 ]
- もう何がなんだかわからないよママン
- 378 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 09:26:26 ]
- >>359
もともとがCへのトランスレータだった事を考えれば自然に合点が行くね。 for( int i = 0 ; .... ) { ... } 変換後 { int i ; for( i = 0 ; .... ) { ... } }
- 379 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 09:47:14 ]
- >>377
C++の仕様書を見ればいいと思うお
- 380 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 09:57:02 ]
- >>372
リンカなどの外部に公開され得るのはクラスであって内部リンケージであるメンバが同様に公開されているように見えるのは処理系の都合
- 381 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 11:33:58 ]
- >>380
クラスが外部リンケージを持つときに、メンバ関数が外部リンケージを持つかどうか は処理系依存だと言っているのならそれは違うよ
- 382 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 03:01:24 ]
- >>377 >329,324
- 383 名前:デフォルトの名無しさん [2008/03/30(日) 01:04:01 ]
- テンプレートをつかうと一気にコンパイル時間が10倍に?!
- 384 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 01:07:31 ]
- >>383
>>5
- 385 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:11:26 ]
- template使っても
型が1個と100個じゃ大違いだろ
- 386 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:17:08 ]
- このテンプレいつの間にか一つのレスにまとめられてたのかw
- 387 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 15:27:00 ]
- template <typename Questioner>
int IsCompileTimeBecomeLongerByUsingTemplate() { return ENVIRONMENT_DEPENDENT; }
- 388 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:25:46 ]
- テンプレート無意味過ぎる
- 389 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:28:21 ]
- >>388
質問者に応じて別の回答をするように特殊化するんだよ。
- 390 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:36:16 ]
- template<> int IsCompileTimeBecomeLongerByUsingTemplate<教えて君>()
{ throw spoon(); }
- 391 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:59:30 ]
- 匙は投げられた。
- 392 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 17:30:09 ]
- the biggest news of the meeting was that we voted lambda functions and closures into C++0x.
// Writing a collection to cout, in C++0x: for_each( w.begin(), w.end(), []( const Widget& w ) { cout << w << " "; } );
- 393 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 17:59:38 ]
- スレ違い
- 394 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 01:28:23 ]
- LRESULT CALLBACKの関数をCLASSに所属させるにはどうすればできますか?
- 395 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 01:37:29 ]
- static
- 396 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 02:07:44 ]
- >>394
web.archive.org/web/20070810174250/http://techtips.belution.com/ja/vc/0009/
- 397 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 05:36:51 ]
- RTTIについて質問です。
RTTIありでオブジェクトファイルを生成したいが 外部libなどがRTTIを含んでいない場合は 自分側もそれにあわせてRTTIなしで組まなければ成らないのでしょうか?
- 398 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 10:26:48 ]
- コンパイラオプションでRTTIを使うかどうかの設定の話なら、ケースバイケース。
自分が知るVC++では、外部のオブジェクトに対してtypeidやdynamic_castをしなければ、 自プログラムがRTTI有効でも、問題なくリンクして実行できる。 逆にそうでない処理系も世の中あるかもしれない。
- 399 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 12:28:13 ]
- >>397
リンクでエラーが出たらオプション変えればいいんじゃないか?
- 400 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 17:21:40 BE:1614463687-2BP(200)]
- www.borland.co.jp/cppbuilder/freecompiler/
が切れていてBorland C++ Compilerがダウンロードできないんだけど
- 401 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 17:25:43 ]
- >>400
普通にアクセスできるしスレ違いですさようなら
- 402 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 02:25:47 ]
- test
- 403 名前:397 mailto:sage [2008/04/01(火) 02:34:57 ]
- >>398
環境依存てことですかね〜。 >>399 vcとのクロス開発あたりだとエラーがでてしまうのです;; 根本的になにをやりたいかというと、 シリアライズ機能を自前で実装しようと考えていまして 実装の際にRTTIのtypeidを利用して組むとらくそうなのですが・・・ ない場合はMFCやwxWidgetのようなクラス毎にマクロを仕組んで 独自の機構を作るしかないのかなって悩んでしまって・・ ※boostのシリアライズという選択肢もありますが、boostが対応していない環境も考慮しました。
- 404 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 06:49:14 ]
- というか、例外・RTTI・CRTは、何も考えずに
DLL超えとか、コンパイラ/オプションの違うlibを混ぜるとか するとハマるよ?
- 405 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 06:58:03 ]
- >>403
libのクラスをもう一度派生させたのを使ってみてはどうかな? 念のために聞くけど、そのlibをコンパイルしたコンパイラと使ってるコンパイラの種類とバージョンはあってる?
- 406 名前:397 mailto:sage [2008/04/02(水) 04:43:48 ]
- >404
こちらはそこを懸念してるんですが、出来上がったものを使うのは私ではないのでなんとも・・・ >405 バージョンのほうはあってますが、こちらでつくったモジュールがどのようなケースで使用されるか をすべて網羅するわけにはいかないので・・ 派生というかstubのようなものをproxyとして使用する感じでしょうか? なんというか、それなりの状況でも使用に耐えうるもの、となると 結局RTTIははずさなければならないのかな、と思いました。
- 407 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 05:08:21 ]
- これはひどい
builder.japan.zdnet.com/sp/c-programming-language/story/0%2C3800083430%2C20370255%2C00.htm
- 408 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 06:12:08 ]
- アクセスできるすべての識別子をリストアップするようなツールはないでしょうか。
class X { int i; public: int j; void f() {} }; というような場合に、 X X::j X::f() みたいに出力できるとうれしいのですが……。自分で字句解析するしかないかな。
- 409 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 06:47:39 ]
- doxygenいろいろ設定すれば出来るんじゃね?知らないけど。
- 410 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 08:45:55 ]
- >>407
他で散々話題になっているんだからここでまで張らなくていいよ。
- 411 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 00:16:30 ]
- >>408
doxygenで可能。privateは出てこない(設定で変えられるかも)
- 412 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 13:46:16 ]
- extern "C"しないで作られたshared libをcから呼ぶ方法ないでしょうか?
- 413 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 14:19:43 ]
- マングリング名がCの識別子として使えるならいけるかもね
- 414 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 14:49:22 ]
- C++ で C 用のラッパ関数作るといい。
- 415 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 16:47:51 ]
- >>412
.defファイルをがんがって作る
- 416 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 20:14:21 ]
- ふつーにdlopenするとか。呼び出し規約が同じとは限らないけどw
- 417 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 17:03:38 ]
- gccxmlを使った他言語(pythonなど)への
インターフェース自動生成ツールが最近でてきてるけど ちょっと複雑なコードだと自動生成に失敗するみたいだ まだ発展途上のツールだから仕方ないのか gccxmlに渡すオプションを考えればうまくいくのか どうなんでしょうか?
- 418 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 20:28:21 ]
- Exceptional C++ を読んでて、疑問点が出てきましたので質問します。
P173〜181 にかけての auto_ptr についての説明中に、 T* pt( new T(1) ); auto_ptr<T> pt( new T ); auto_ptr<T> a( source() ); ↑どう見ても関数呼び出しに見えるのですが、 初期化子と解釈しないとどうも前後の説明から辻褄が合いません。 ですが、手元にある数冊の参考書を調べてもググってみても 以上のような構文は「コンストラクタ初期化リスト」以外には見あたりませんでした。 これは関数呼び出しなのでしょうか?それとも初期化子なのでしょうか? もし、初期化子だとしたら、このような構文が出てきたときに どのようにして見分けたら良いのでしょうか? また、関数呼び出しのように見える初期化子の使い方についても よろしくご教示願います。
- 419 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 20:34:16 ]
- まさか<T>の部分を聞いてるのか?
- 420 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 20:43:27 ]
- int i = 0;
int i(0); 上のふたつは等価、という話なのかな? typename identifier(typename, typename, ...); // プロトタイプ宣言 typename identifier(arg1, arg2, ...); // 初期化 identifier(arg1, arg2, ...); // 関数呼び出し ただし、C++では、関数宣言として解析できるものは関数宣言と見なすので、 list<int> data(istream_iterator<int>(cin), istream_iterator<int>()); は(cinの内容で初期化したlistの宣言ではなく)関数宣言になる。
- 421 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 21:26:48 ]
- typedef typelist< char, 1, 2, 3, bool > LIST;
なんてことは出来ないですかね?
- 422 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 21:32:31 ]
- boost::mpl, boost::tuple, boost::fusion辺り?
- 423 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 22:43:42 ]
- >>418 読むだけじゃなくていろいろ試してみたら?
- 424 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 23:49:20 ]
- classメンバを外部からリードオンリーに出来ませんか?
全部のメンバにゲッタを設定するのも面倒ですし
- 425 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 23:49:20 ]
- >>418
その本持ってるが、その部分に間違いはない。 auto_ptrのメンバ関数のインターフェース見れば疑問は無くなるはず。
- 426 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 00:19:52 ]
- >>424
面倒でも書く。
- 427 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 00:32:34 ]
- >>424
class A{ public: int aho; }; const A baka; //全部リードオンリーなクラス
- 428 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 00:46:55 ]
- >>424
必要になるまでゲッタなんて書かなきゃいい。
- 429 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 00:59:50 ]
- >>424
constは?
- 430 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 01:07:46 ]
- constなんてダサい。時代はreadonly。
- 431 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 01:08:06 ]
- extern "C" {
struct B : public A {}; } ができた. class AのデータだけにはCからアクセスできるのかも methodは無理か?
|

|