我的所有类都实现了一个dump
成员函数,例如:
struct A { templatestd::basic_ostream & dump(std::basic_ostream &o) const { return (o << x); } int x = 5; };
我想operator<<
为所有这样的类实现一次函数:
templatestd::basic_ostream & operator<< (std::basic_ostream &o, const T &t) { return t.dump(o); }
问题是此模板捕获了所有类型,包括标准类型.有办法解决这个问题吗?
templateauto operator<< (std::basic_ostream & str, const T & t) -> decltype(t.dump(str)) { static_assert(std::is_same &>::value, ".dump(ostream&) does not return ostream& !"); return t.dump(str); }
此重载operator<<
仅适用于定义适当dump
成员的类型.
编辑:添加static_assert以获得更好的消息.