1 名前:デフォルトの名無しさん [2007/07/26(木) 00:33:07 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 テンプレその他 >>2-15 付近参照 前スレ class C++相談室lt;part56gt; pc11.2ch.net/test/read.cgi/tech/1170343752/l50
29 名前:24 mailto:sage [2007/07/27(金) 18:27:51 ] >>25-26 すいません。できました。 *.insert(pair<string, CHoge *>()) のCHogeの名前(ホントは違う名前)が間違ってましたww ご迷惑おかけしました。
30 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 19:05:41 ] だからstd::make_pairを使えと
31 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 19:58:51 ] >>30 はいw
32 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 00:19:52 ] 関数の引数を参照にしても内部的にはポインタと同じになるの?
33 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 00:23:49 ] ならん。
34 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 00:46:07 ] なるかどうかは実装次第
35 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 01:21:06 ] 参照は単にコンパイル時に一意に決まるインスタンスへの別名ということ? ポインタとは違う実装というのは具体的にどんなものがあるの?
36 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 07:50:55 ] ポインタで書くよりも参照で書いた方が最適化が利き易い。 最適化の結果、(関数のインライン化などで)差がつくこともしばしば。
37 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:23:56 ] STLのvectorに関して質問があります。 main() { vector<int> vec; int v[3] = {0, 1, 2}; vec.resize(3); // コピー } 上のソースで、v[3]のデータをvecに入れたい、 (勿論、vec[0] : 0 vec[1] : 1 vec[2] : 2のように) のですが、一発で入れる方法無いですか? やはり、for等でvec[loop] = v[loop]にするか、イテレータ使うしかないのでしょうか? よろしくお願いします。
38 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:30:41 ] >>37 int v[] = {0, 1, 2,}; std::vector<int> vec(v, v + sizeof(v) / sizeof(* v)); じゃいかんの?
39 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:34:37 ] std::copyとか?
40 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:43:24 ] std::copy(v, v + sizeof v / sizeof *v, vec.begin());
41 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:50:19 ] >>38-40 レスありがとうございます。 書き忘れましたが、std::vector<int> vec;は別のところで宣言しているため >>38 さんのやり方では無理でした・・・すいません。 なので、copyについてググってたら答えが、、 >>40 さんありがとうございます。 sizeof vとかっていう()の無い使い方初めて見たのですが、sizeof()と同じですか?
42 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:52:37 ] sizeof はカッコ不要。 つけたければつけていいけど。
43 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:53:35 ] >>41 対象が型名でないsizeofは括弧を必要とはしていない。
44 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:54:42 ] >>42-43 そうだったんですか。。勉強不足でした。ありがとうございます。
45 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 11:04:36 ] >>37 assign()
46 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 11:16:34 ] >>45 vectorにassign()というのも用意されてたんですね、、 ありがとうございます。
47 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 11:27:52 ] こうやって参照渡しにNULLが渡せるのは規格として正しい動作なんですか? gcc4.1とvc8sp1両方ともこれが通って &str is NULLが出力されます。 #include <iostream> #include <string> void func(std::string& str) { if(&str == NULL) { std::cout << "&str is NULL" << std::endl; } } main() { std::string *str = NULL; func(*str); }
48 名前:デフォルトの名無しさん [2007/07/28(土) 11:28:13 ] >>47 未定義動作。
49 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 11:37:28 ] >>48 ありがとうございます。 具体的にどの部分が未定義動作になりますか? 1, *str (NULLの参照外し) 2, 参照型にNULLアドレスの実体が渡る事 3, funcのif条件で&strとして参照型のアドレスを見に行った事 1と2で合ってますか? そもそも1が未定義なので2は起こる事はあり得ないはずという認識の方がいいんでしょうか?
50 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 11:44:59 ] 1 は、参照先にアクセスしたり参照の初期化に使ったりしない限りは未定義じゃない。 例えば main 内で &*str がヌルポインタになるのは well-defined 。 だから、未定義なのは 2 と 3 。
51 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 11:45:49 ] 良く分かりました。ありがとうございました。
52 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 12:16:54 ] >>50 それって↓ここにある話だよね? www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#232 現行の規格では 1 も未定義動作と読めるから、ダメだと考えておいた ほうがいいんじゃない?
53 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 12:22:51 ] DirectX SDKに以下のクラスがあって D3DVECTOR(Cバージョン。float x,y,zのみ) D3DXVECTOR3(C++バージョン。上記にメンバ関数が付いた) 後者を引数として受け取る関数 func( D3DXVECTOR3 &v ) に前者D3DVECTORを渡そうとしているのですが、型が違うという エラーがでるので、func( (D3DXVECTOR3)v )とキャストしています。 問題なく動いているのですが、こういうキャストって文法的に問題無い のでしょうか?なんとなく違和感があって func( *((D3DXVECTOR3*)&v) ) こっちに直そうかと思っているのですが…
54 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 12:32:14 ] ちょっと試してみたのですが、メンバ変数が異なるクラスを func( (D3DXVECTOR3)hoge ); とするとちゃんとエラーが出ますね。ということはコンパイラが ちゃんとそこまで判断して通してくれているのでやはり合法 なのかな?
55 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 12:32:50 ] >>52 あら、そうだったんだ。すまん。
56 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 12:38:55 ] >>53 msdn2.microsoft.com/en-us/library/ms887536.aspx D3DXVECTOR3 は D3DVECTOR からの変換コンストラクタを持っているので (D3DXVECTOR3)v が static_cast 相当の働きになり、一時オブジェクトが作られる。 ただし標準では一時オブジェクトを非 const 参照には渡せないので、 func() の呼び出しがエラーになるはず。 VC 系は最新でも通るんだっけ? >>54 メンバ変数が同じかどうかは関係ない。
57 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 13:06:23 ] >>53 >>56 とりあえずVC7.1で試してみた感じだと、 「組み込み型では通らないけどユーザー定義型なら通る」っぽい。
58 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 13:55:59 ] >>56 >>57 なるほど、やぱり駄目な書き方なのですね。私も最初エラーになると 思ったのですが、動いてしまったのでむしろ驚きました。 ちなみにこちらは.NET2003です。 >メンバ変数が異なるクラスは駄目 ここら辺はVCの独自拡張なのかな? とりあえず以下の書き方に直します。 func( *((D3DXVECTOR3*)&v) );
59 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 16:40:05 ] どこをどうすればそこまで誤読できるんだ?
60 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 16:44:32 ] >>59 それが説明できるくらいなら誤読しないだろ。
61 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 17:33:43 ] あれ?誤読してます? 文法的に問題ないということでしょうか? func()の引数にconst付ければ問題ないということです?
62 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 20:54:10 ] 無名構造体のコンストラクタ、デストラクタはどうすればじっそうできるの
63 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 21:19:58 ] 無名をやめればいい
64 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 22:00:17 ] 無名でなければならない時は?
65 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 22:03:48 ] 適当な名前を付けろ。
66 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 22:17:25 ] >>64 どんなとき?
67 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 22:19:42 ] \ / ヽ l | / \_人从__ ヘ、 ヽ _..≧=ヽ|Y〃/∠._ / } \ ,′ \ >ヘ´ | / '⌒≦ / ノ ヽ. /// `X < く V !. \ / , / / | j{ /ヽ ) だ I !. /〃/ / / , 〃|l U \ ヽ `) さ P / {/ / / / / || |l } lヽ 丶 < い で ‐- . / { / 〃,′{ { |l jl | |ハ ヽ} ヽ ! や _ ヽ、 { ハ{ { {/´≧x x≦ヽハ\ ヽ〈 ノ、 っ  ̄ ≧‐-{;;;\ヽ{ {:::{.j {.j::} }|lヽ \ ハヽ=≦ヽ て / `八;;;;;;;;....|xx`~ _'_ `~xxjハヽ;;;;;;;;;;}ハ } -‐ァ'//´ ヽ:;;;;...{ヘ、 ( j ノ ハl|;;;;;;;ハ  ̄ ノ / -/ // , \/⌒≧ーr---ァ≦'⌒ヽノ}|};;;/ハ /⌒Y⌒ヽ{ 7/ / / 〉\ }ノ'⌒ヽ // | リノ \ { / ノ厂 {{ }'⌒ヽ⌒ヽL_ \ \! j/ / f´/ ノ>ァ‐1 j| l ) \ j ハ / W 〃/ `ーく{ |{ \ \,' ハ / / l{ / イ ー==- \\ Y ヽ \ /\ × / ノ // | \ヽ \ ヽ \ イ
68 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 22:27:57 ] 何故だ
69 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 22:29:49 ] >>66 好きなものは好きと言える気持ち抱きしめてたいとき
70 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 22:37:43 ] >>69 俺の胸に飛び込んで来い
71 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 23:01:58 ] まんゆうき懐かしいな
72 名前:名無しさん@そうだ選挙に行こう [2007/07/29(日) 14:36:28 ] perlだと1行でできた・・・
73 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 16:18:36 ] C++始めたばかり何でちょっと分からないことがあります。 class C { public: int hoge; }; class B { C *c; public: B() : c(NULL) {} virtual ~B() { if (c != NULL) { delete c; c = NULL; } } void init() { c = new C; c->hoge = 4545; } int Get() { return c->hoge; } }; class A { B b; public: B Get() { return b; } void init() { b.init(); } void print() { printf("%d\n", b.Get()); } }; int main() { A *a = new A; a->init(); B b = a->Get(); printf("%d\n", b.Get()); a->print(); delete a; return 0; } このソースなんですが、Bクラスのデストラクタが2回呼ばれてエラーを吐きます。 私的には、delete a;した時に1回だけ呼ばれてほしいのですが、どうすればいいのでしょうか? 分かる方お願いします。
74 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 16:35:39 ] 代入演算かコピーコンストラクタか…その辺でググレば幸せかもしれない?
75 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 16:43:15 ] >>73 エラーも吐かずに普通に実行できてしまった。 再現方法は?
76 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 16:46:38 ] B b = a->Get(); ↑これをポインタで受け取れば?
77 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 16:48:41 ] 返事ありがとうございます。 >>74 ちょっと調べてみます。 >>75 試しに、Releaseビルドで実行したら普通に実行できました・・・。 Debugビルドだとエラー吐きます・・・ 一応環境は、VS2005 pro です。 >>76 ポインタで受け取ってみたらエラー吐かずに実行できました。 どういう事なんでしょうか??
78 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 16:51:32 ] C++の初心者はnew/deleteを使わないほうがいいと思うんだ。
79 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 16:53:22 ] 問題はそっちじゃなくて、class BのCポインタが2回削除されていること。 #delete aと、B bがdeleteされるとき メンバーポインタはけっこう難しいので、最初は使わないほうがよろしいかと。 boost::shared_ptrがお勧め
80 名前:79 mailto:sage [2007/07/29(日) 16:57:41 ] あと、C++の場合は「このインスタンスの所有者は誰?」というのを常に意識すると良いよ。 あと、RAIIを調べると幸せになれるかも。
81 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:01:31 ] ここで返したいのはprivateのBだよね? B Get() {return b;} これだとここでコピーが行われて新しくメモリ作られるよ ポインタで返すようにして B* Get() { return &b; } こうやってポインタで受け取るべき B* b = a->Get();
82 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:01:59 ] >>78-80 返事ありがとうございます。 boost::shared_ptrですか、、聞いたこと無いな、、 ググってきます。 アドバイスなどありがとうございます。 参考にさせていただきます。
83 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:03:58 ] >>81 >B Get() {return b;} >これだとここでコピーが行われて新しくメモリ作られるよ あっ、そういうことですか。 難しいですね、、 ありがとうございます。
84 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:11:24 ] >>83 >難しいですね、、 だから、>78。 そもそも、なんでnew/deleteを使うのか理解している? #Javaじゃあるまいし、new/delete[]と違ってnew/deleteの必然性なんてそんなにないだろうに。
85 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:14:37 ] そんなにnew/delete使わせたくないならnew/deleteについて語れよ。
86 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:22:24 ] こういうノウハウを覚え続けないとまともに使えないのがC++
87 名前:えいいち ◆GRGSIBERIA mailto:sage [2007/07/29(日) 17:22:56 ] MS-DOSのようなコマンド入力を受け付けるようなプログラムを組んでいるのですが、 char name[20]; char *p; int j = 0; cin >> name; p = name; if(*p == 'a'){ j = 1; } p++; if(*p == 'b'){ j = 1; } if(j == 1){ cout << "成功\n"; }else{ cout << "失敗\n"; } return 0; のように書くと、コマンドの文字数や種類が増えるにつれて何行もif文に費やされることになってしまいます。 簡略化できる方法を教えてください。
88 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:24:33 ] >>73 コピーされては困るクラスでは代入演算子やコピーコンストラクタをprivateにしよう。 class B { C *c; public: 略 private: B(const B&);//禁止 const B&operator=(const B&);//禁止 }; 詳しくはEffective C++でも読んでくれ。
89 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:26:53 ] new/delete使う使わないは好き嫌いの問題でおk?
90 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:27:26 ] >>87 多重分岐→データテーブル→データファイル化
91 名前:えいいち ◆GRGSIBERIA mailto:sage [2007/07/29(日) 17:28:17 ] 修正 if(*p == 'b'){ j = 1; } ↓ if(*p != 'b'){ j = 0; }
92 名前:79 mailto:sage [2007/07/29(日) 17:29:45 ] new/deleteも便利だから、まったく使わないのはもったいない。 new/deleteで問題なのは所有者がはっきりしないことなので、そこに注意していればいい。 何だかんだ言って、boost::shared_ptr使うのが良いけどね。
93 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:31:47 ] >87 つ Commandパターン
94 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:41:24 ] shared_ptr便利そうだけど STLだけでやりたい漏れはいらないや。。
95 名前:えいいち ◆GRGSIBERIA mailto:sage [2007/07/29(日) 17:44:12 ] >>90 ,93 ありがとうございます。
96 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:50:08 ] >>94 auto_ptr 使え。
97 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:56:30 ] >>94 std::tr1::shared_ptr
98 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 18:04:17 ] >94 そうすると、auto_ptr + 生ポインタかね。 ライセンス制限ないんだから素直にboost使えばいいんじゃね?とは思うけど。
99 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 18:05:02 ] boostインスコめんどいよめんどいよ
100 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 18:48:13 ] shared_ptrぐらいならビルドする必要ないだろ。 インクルードパスを通しておくだけ。
101 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 18:57:05 ] このプログラムのエラーがわからなくて困っています hash_set<string> h; string s = "Hoge"; h.insert(s); stringじゃないものを指定した場合にはinsertではエラーが出ないんですが、stringだと出てしまいます。 コンパイラはg++を使っています。 原因は何でしょうか?また、対応策はあるのでしょうか?わかる方がお願いします。
102 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 19:20:21 ] >>101 エラーメッセージは?
103 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 19:31:22 ] boostってライブラリとソース落としてこないと使えないでしょ?
104 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 19:39:55 ] 一部を除いてヘッダをインクルードするだけで使える
105 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 19:41:45 ] >>101 >原因は何でしょうか? ext/hash_fun.hに template <> struct hash<std::string> が定義されてないから >対応策はあるのでしょうか? たぶんこんなんで良いと思う #include <string> #include <ext/hash_set> struct string_hash { size_t operator () (const std::string &p) const { return __gnu_cxx::hash <const char *> () (p.c_str ()); } }; int main () { __gnu_cxx::hash_set <std::string, string_hash> h; std::string s = "Hoge"; h.insert(s); }
106 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 19:46:06 ] >>103 じゃ今後ともどんなプログラムも頑張って標準関数だけで書いていって下さい
107 名前:105 mailto:sage [2007/07/29(日) 19:49:47 ] あぁ105では動くけど速くないかも知れんよ
108 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 19:59:10 ] vs2008がboostのライブラリを2,3個破壊しないか心配
109 名前:名無しさん@そうだ選挙に行こう [2007/07/29(日) 20:09:15 ] ヘッダファイルのみ(ソースファイルは無し)で 唯一の静的汎用クラスを作ろうとしてこうしたんだけど、 こういう書き方普通?一応うまくいってますが //test.h #include <windows.h> class CTest{ friend CTest* test(); CTest(){} char *c; //実質静的メンバ変数(ソースで初期化する必要なし!) public: void f1(){c="f1";MessageBox(0,c,0,0);} void f2(){c="f2";MessageBox(0,c,0,0);} void f3(){c="f3";MessageBox(0,c,0,0);} }; static CTest* test(){ //ここからのみアクセスできる static CTest inst; return &inst; } //main.cpp #include "test.h" int main(){ test()->f1(); test()->f2(); test()->f3(); }
110 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 20:13:23 ] ポインタは遅いしいろいろ駄目だから なるべく参照を使っているのですが、 戻り値に参照を使っているときに関数が失敗したときに NULLは返せません。この場合どうすればいい? exit(0)で強制終了するとか駄目だし・・・
111 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 20:13:45 ] シングルスレッドならいいんじゃね
112 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 20:14:28 ] >>109 2つのソースから include して使ってみろ。うまくいかない。
113 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 20:16:26 ] >>109 > static CTest* test(){ このstaticは余計なんじゃねーの
114 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 20:16:37 ] >>110 ポインタが遅いから参照ってのが大間違い。そんなの信じてるようじゃ 「いろいろ駄目」ってのも疑わしい。ヌル返したいなら素直にポインタ使え。 本当に参照が適切なら、失敗を例外で伝えるという手もある。
115 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 20:19:56 ] ポインタって参照に比べて遅いの? 一番早い書き方は?
116 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 20:20:38 ] >>103 Boost Consultingにインストーラあったと思ったが
117 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 20:21:47 ] ポインタが遅いってなんだ? エイリアスが無いと判断しにくいから最適化しにくいとかそういう話?
118 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:26:48 ] >>113 コンストラクタがprivateなのにどうやってインスタンス化しろっての。
119 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:38:07 ] >109 一昔前ならLoki::Singletonをお勧めしていたところだけど…… boostにSingletonあったっけ?
120 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:40:12 ] つーかそもそもシングルトン、要るか?
121 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:41:02 ] いらねーよ。今でも要らないシングルトンが量産されてるってのに。
122 名前:デフォルトの名無しさん [2007/07/29(日) 20:41:20 ] __ .__ /| \ / |\ / | / | \ Nentansoft | /\/ ^o^ /\/| |/\/ /\/ | J i n s e i O w a t a o 2 0 0 5 \ | / | / \|__/ \__|/
123 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:42:09 ] >>118 それ static 関係ない。 friend が指定してある。 あれ? friend に内部リンケージの関数って不味くないか?
124 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:47:46 ] それ、翻訳単位毎にtest関数とその中の CTestのinstが存在することにならね?
125 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:52:14 ] >>119 ttp://boost.cppll.jp/HEAD/libs/pool/doc/implementation/singleton.html
126 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 21:27:24 ] >>109 テンプレートクラスなら普通にstaticなメンバ変数をヘッダ内に書ける(ODRに違反せずに「定義」できる)んじゃ無かったっけ? それなら前にやったことがあるけど。 っていうかこれってどうやってるんだろう。やっぱリンカががんばってるんだろうか。 テンプレートじゃなきゃ、別にヘッダだけで収めようとしたことはないなぁ。
127 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 22:16:17 ] >>109 コピーコンストラクタを禁止しないのはまずいと思う
128 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:34:51 ] >>116 いや、便利ライブラリが嫌いなんじゃなくって STL以外だと会社にもってって使えないいんよね。 便利なパーツは単体で、尚且つインクルード/コピペするだけで リンカの設定弄らなくてもさくっとコンパイルできるのがいい。 ソース管理されてる環境だとプロジェクトファイルすら弄れないしね。。
129 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:39:49 ] >>128 同意