ネタ元>[C++] C++0x forward_list
C++0xに単方向リストが実装されるという話なのですが、
その際、size()が実装されないということらしいです。
理由として、size()を持つメンバ変数領域が無駄だそうで。
これは100歩譲って認めるとしても、push_back()も実装されないそうです。
単方向なのでend()からは辿ることができないから無理もないのですが、
size()のメンバ変数を持つことを嫌う人が、
push_back()のためにbefore_endをメンバ変数にもつとは思えません。
となると、push_front()を主に使ってプログラムを組むことになるのですが、
今までのSTLのコンテナがpush_back()を中心に作られている上、
先頭から物が詰め込まれるというのはなかなか使い勝手が悪く思えます。
そうなると、この辺を実装したrich_flistが欲しいわけですが、どうやって作るか問題です。
ですが、デストラクタにvirtualが付いていませんので、これでは派生はできません。
virtualをつけてしまうとvfptrが付いてしまうため、size()のメンバ変数を嫌う…(以下略)
となると、所有で解決するか、一から作り直すことになるでしょう。
どちらにしろ、forward_listとrich_flistの両方を受け入れる関数を作るには
テンプレートを使ったプログラムが必要になります。
もっとも、forward_listの発端がメモリの節約なので、
メモリ消費量が増える機能拡張はなし、というのはわかるのですが…。
要素毎に逆方向ポインタがつくのは嫌だけど、size()やpush_back()は使いたい、
そういうニーズをうまく解消する方法はないものですかねぇ。
#そこで、マジックリストを標準ライブラリに!!