MsgPack のソース コードを調査しようとしています。この例には、次のフラグメントがあります。
std::vector<std::string> vec;
vec.push_back("MessagePack");
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, vec);
/usr/include/msgpack/object.hpp を見ると、パックされるオブジェクトにはメソッド msgpack_pack が必要です。
template <typename Stream, typename T>
inline packer<Stream>& operator<< (packer<Stream>& o, const T& v)
{
return detail::packer_serializer<Stream, T>::pack(o, v);
}
namespace detail {
template <typename Stream, typename T>
struct packer_serializer {
static packer<Stream>& pack(packer<Stream>& o, const T& v) {
v.msgpack_pack(o);
return o;
}
};
}
そのため、コンパイラが std::vector を msgpack::pack に渡す方法を理解できません。