参照渡しと定数
extractと同じように複数フォーマット対応のアーカイバも作りました。
archive.cpp
実装では、id:mb2sync:20060622 の問題に遭遇しました。
struct entry { boost::optional<boost::uint16_t> attributes; // ... }; struct msdos_attributes { static const boost::uint16_t directory = 0x0010; // ... }; entry e; e.attributes = msdos_attributes::directory;
ここで、boost::optionalの代入演算子が、
optional& operator = ( T const& v ) ;
なので、msdos_attributes::directoryのアドレスを要求され、リンカエラーになりました。
msdos_attributes::directoryのアドレスを使わなければよいので、
boost::uint16_t attr = msdos_attributes::directory; e.attributes = attr;
とか、
e.attributes = static_cast<boost::uint16_t>(msdos_attributes::directory);
で回避できました。