OptionalかわいいよOptional

4
前へ 1 ・・ 3 4 6 次へ
普通のC++使い、銀天すばる @SubaruG

今日やるべき事: 「それでも Boost.Optional を使う n の理由」というBlog記事をかく。

2010-06-03 05:14:27
だし巻き卵 @mashiro

C++は他の言語で1の労力でできることを実現するのに100とか1000とか労力を注いでてとても楽しい。

2010-06-03 05:17:34
普通のC++使い、銀天すばる @SubaruG

無論、普段はメモリ管理とオブジェクト管理は切り離すべきではないのですが。それこそ「それBoost.Optionalで出来るよ!」「それ make_shared で出来るよ!」だし。

2010-06-03 05:22:04
普通のC++使い、銀天すばる @SubaruG

Boost.Optional のようなものを、高効率でライブラリとして実装出来る、ってのが素晴らしいのです。

2010-06-03 05:22:37
普通のC++使い、銀天すばる @SubaruG

メモリ管理でごにょる為に、言語自体の侵入的なサポートが要らないのです。

2010-06-03 05:23:09
普通のC++使い、銀天すばる @SubaruG

…だから何、という話ですが…嬉しいんだよ! 僕らC++erには!

2010-06-03 05:23:32
普通のC++使い、銀天すばる @SubaruG

大事なのは、メモリが見えるだけじゃなく、メモリ管理をライブラリによって隠蔽出来る、という点だしにゃー。

2010-06-03 05:26:51
普通のC++使い、銀天すばる @SubaruG

Boost.Optional の変種で、コンストラクタではオブジェクトを構築しないで、実際に *x とか呼ばれたときにオブジェクトを構築するような何かを作ってみてはどうか。

2010-06-03 06:10:34
Ikegami Daisuke @ikegami__

コンパイル時では値が同じになるかどうかわからないので、さすがにそれは難しいのではないかと RT @SubaruG 二回目からは計算させたくない

2010-06-03 06:11:39
普通のC++使い、銀天すばる @SubaruG

引数パックの合計サイズが sizeof(T) を超えない場合は、動的メモリ確保しないでおく、という小技とか使って。

2010-06-03 06:11:46
普通のC++使い、銀天すばる @SubaruG

@ikegami__ コンパイル時に機械的に決まって欲しいとは思ってなくて、ライブラリとして適切な物が有るかなー、と。

2010-06-03 06:12:55
普通のC++使い、銀天すばる @SubaruG

コンストラクタで、 T 型を返す無引数関数を受け取る

2010-06-03 06:13:40
普通のC++使い、銀天すばる @SubaruG

オブジェクトが実際に要求される(*で参照外し)されると、その関数が呼ばれて、以降は普通の optional<T> として振舞う。

2010-06-03 06:14:48
普通のC++使い、銀天すばる @SubaruG

move constructible を要求してしまうけど、悪くない方針では。

2010-06-03 06:15:19
普通のC++使い、銀天すばる @SubaruG

無論、一度も呼ばれなければ、関数自体が評価されない。

2010-06-03 06:16:13
普通のC++使い、銀天すばる @SubaruG

となると、ジェネリックな std::function では役者不足だな。スタック上のサイズをテンプレートパラメータとして指定出来る汎用関数オブジェクトが必要だ。

2010-06-03 06:17:57
普通のC++使い、銀天すばる @SubaruG

無駄なメモリ確保など害悪以外の何物でも無い。

2010-06-03 06:18:45
普通のC++使い、銀天すばる @SubaruG

Optional かわいいよ Optional 。任意タイミングで構築/破棄できるオブジェクトってだけで最高。

2010-06-03 08:49:19
鯉江 @koie

m_initializedぽいです RT @SubaruG: うわ。Boost.Optional 終わりすぎ。 optional<T&> って T* と同じもんじゃん。なんでサイズ違うんだ>< http://ideone.com/PIEfo

2010-06-03 08:50:45
鯉江 @koie

m_initializedぽいです RT @SubaruG: うわ。Boost.Optional 終わりすぎ。 optional<T&> って T* と同じもんじゃん。なんでサイズ違うんだ>< http://ideone.com/PIEfo

2010-06-03 08:50:45
普通のC++使い、銀天すばる @SubaruG

@koie サイズが違う時点で中身は推測出来ましたが、これ明らかに無駄ですよね。

2010-06-03 08:52:06
鯉江 @koie

@SubaruG 自滅するときにT::~T()を呼ぶかどうか決めないといけないのでしかたなくないですか?

2010-06-03 09:03:47
鯉江 @koie

@SubaruG 自滅するときにT::~T()を呼ぶかどうか決めないといけないのでしかたなくないですか?

2010-06-03 09:03:47
普通のC++使い、銀天すばる @SubaruG

@koie T& だと必要ないですよね。明らかに。

2010-06-03 09:05:45
前へ 1 ・・ 3 4 6 次へ