S.F.Tracker(161)

公開:2006-03-26 06:48
更新:2020-02-15 04:36
カテゴリ:sftracker,c++,windows,audio,tracker

XMLでシリアライズすると容量が大きくなるので、boost iostreamsのzlib_compressorフィルタを使用して圧縮を試みるが、compile errorが発生する。

std::wofstream file_("vst_machine_serialize_test.xml");

を下の記述に書き換える。

boost::iostreams::filteringwostream file(
boost::iostreams::zlib_compressor()
| boost::iostreams::wfile_sink("vst_machine_serialize_test.xml.z",
std::ios::binary));

すると下記のエラー発生:
C:\Boost\include\boost-1_33_1\boost\iostreams\chain.hpp(246): error C2664: 'std::list<_Ty>::push_back' :
1 番目の引数を 'facade_type ' から 'boost::iostreams::detail::linked_streambuf & ' に変換できません。
with
[
_Ty=boost::iostreams::detail::chain_base std::char_traits,std::allocator>,wchar_t,std::char_traits,
std::allocator,boost::iostreams::output>::streambuf_type

]
and
[
Ch=wchar_t
]



Unicodeのストリームだと問題が発生するようだ。

Boost Mailing Listにも同様のコメントがあったが、よく読むとzlib_compressorはあくまでサンプルであり、実装の単純化のためchar固定にしているようである。

http://lists.boost.org/Archives/boost/2004/09/71686.php