background_copyとseek

タイトルをbackground_copy::seekとしなかったのがミソです。結局background_copyにはseekを実装しないことにしました。
background_copyにはコピーしたバイト数を返すtell()メソッドがあるのですが、SourceもSinkもseek可能にすると、「コピーしたバイト数」の意味がよく分からなくなってしまうのです。
また、copyクラスにseekという同レベルの操作をメソッドとして提供するのも変な感じです。
とは言え、オーディオ再生にseek操作は必須なので、background_copyとは別にオーディオ専用の操作クラスを考えたいと思います。機能を分割することでbackground_copy自体もシェイプアップできそうです。

ちなみに、seekを実装していて気が付いたのですが、basic_stringbuf::seekoff()がin|outなseekをする場合に現在位置を基準にできないのは、関数の戻り値として返すべきポジションが入出力で異なるからですね。考えたら当然ですが。