arbitrary_pos_filter_facade
任意位置ストリームFilterを作成するarbitrary_pos_filter_facadeを追加しました。これに合わせて、arbitrary_positional_facadeはarbitrary_pos_device_facadeに変更しました。
arbitrary_pos_device_facadeとarbitrary_pos_filter_facadeはコードがほとんど重複しているのですが、core_accessへのアクセスが制限されている関係でうまく共通化できていません。
template<int Dummy> struct device_operations { std::streamsize read_blocks( Derived& t, CharT* s, std::streamsize n) const { return core_access::read_blocks(t, s, n); } std::streamsize write_blocks( Derived& t, const CharT* s, std::streamsize n) const { return core_access::write_blocks(t, s, n); } }; template<class Device> struct filter_operations { Device* dev_ptr_; explicit filter_operations(Device& dev) : dev_ptr_(&dev) {} std::streamsize read_blocks( Derived& t, CharT* s, std::streamsize n) const { return core_access::read_blocks(t, *dev_ptr_, s, n); } std::streamsize write_blocks( Derived& t, const CharT* s, std::streamsize n) const { return core_access::write_blocks(t, *dev_ptr_, s, n); } };
というファンクタっぽいものも試して、VC8では動いていたのですが、VC8がBOOST_NO_MEMBER_TEMPLATE_FRIENDSなのでcore_accessのメンバが全てpublicになっていただけでした。
VC8で動いて、gccに持っていくと動かないパターンで結構ハマってます。