C++相談室 part83

このエントリーをはてなブックマークに追加
568デフォルトの名無しさん
>>501
それができたからって >>474 はコンパイル通らねーだろ。
569デフォルトの名無しさん:2010/09/09(木) 09:40:15
>>568
Foo のメンバ変数は一つなんだよ
コンパイラ通らないっていうけど、C++0x に準拠したもので試してるのか?
570デフォルトの名無しさん:2010/09/09(木) 10:17:38
>>569 メンバ変数は boo, f の二つだよ?
571デフォルトの名無しさん:2010/09/09(木) 11:52:26
>>569 >>473
C++0x なら Foo foo[ 100 ]={} でいいだろ。

>>474 のように 0 を書いちゃうと、 boo を 0 で初期化することになって、
Boo に int を受け取るコンストラクタが無いから、エラーになるだろう。
572デフォルトの名無しさん:2010/09/09(木) 13:47:32
>>571
>Boo に int を受け取るコンストラクタが無いから、エラーになるだろう。
C++0xの話だといってるのに・・・
573デフォルトの名無しさん:2010/09/09(木) 14:08:30
0xスレに移動したほうがいい話題じゃねえか?
574デフォルトの名無しさん:2010/09/09(木) 14:17:28
ちょっと今イテレータの勉強してて、全要素を巡回する基本的なイテレーターに対して
特定の条件を満たす要素を巡回するイテレーターを作りたいと思ってるんだけど
1:まったく別の新しい型としてイテレーター型を実装する
2:型消去を使って隠蔽する
3:アダプタをかませる
とりあえずこんな方法が思いつくけど、どれも一長一短でいまいち
1はコードが重複するしクライアントがイテレーターの型を意識しないといけない
2はクライアントは楽だけどメモリ、実行効率ともに若干劣る
3は1よりコード重複が少ないけれどクライアントが型を意識しなければならない点は同じ
なにかほかにいいアイデアはないですかね?
575デフォルトの名無しさん:2010/09/09(木) 14:51:04
>>572
C++0x勉強中だけど、どのコンパイラなら
Foo foo[ 100 ]={0};
がエラーにならないの?その場合配列はどのように初期化されるの?
手持ちのgcc 4.3.3では-std=gnu++0x指定しても当たり前のように
エラーになるけど。
576デフォルトの名無しさん:2010/09/09(木) 15:21:16
>>574
何がしたいのかか全然わからん

作るべきはコンテナじゃないのか?
577575:2010/09/09(木) 15:37:26
ごめん訂正。
×手持ちのgcc 4.3.3
○手持ちのgcc 4.4.3
578デフォルトの名無しさん:2010/09/09(木) 15:41:11
>>574
やりたいのは boost::filter_iterator みたいなもの?
579デフォルトの名無しさん:2010/09/09(木) 15:44:45
>>575
当たり前だ
その一行だけを書いて通るわけがない
エラーメッセージとか読めないのか
580575:2010/09/09(木) 15:50:46
>>579
その一行だけ書いてコンパイルするほどバカじゃないです。
コードは↓ですよ。

struct Boo
{
Boo() : b( 111 ){}
int b;
};
struct Foo
{
Boo boo;
int f;
};
Foo foo[ 100 ];
581デフォルトの名無しさん:2010/09/09(木) 15:51:20
gcc は 4.5 でも 0x の一部にしかサポートされてないよ
582575:2010/09/09(木) 15:52:32
上の
Foo foo[ 100 ];
↓変更
Foo foo[ 100 ]={0};
でエラーになります。