続オートネゴシエーション
昨日の方針をさらに進めて、完全なオートネゴシエーションを考えていました。
namespace hamigaki { namespace audio { template<class Source, class Sink> std::streamsize copy(const Source& src, const Sink& sink) { sink.format(src.format()); return boost::iostreams::copy(src, sink); } } } // End namespaces audio, hamigaki. namespace audio = hamigaki::audio; int main() { audio::copy( audio::vorbis_file_source("doremi.ogg"), audio::auto_nego<audio::pcm_sink>()); }
auto_negoの実装が面倒くさそうですが、こうすればフォーマットの受け渡しを自動化できます。
ただし、SourceとSinkにformatメンバが必要なので、loopやrestrictなどのアダプタをかぶせた場合が問題になります。
やっぱり、無理っぽいです。