gpt4 book ai didi

c++ - operator<< 函数在转储成员函数方面的通用实现

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:37 24 4
gpt4 key购买 nike

我所有的类都实现了 dump成员函数,例如:

struct A {
template <typename charT>
std::basic_ostream<charT> &
dump(std::basic_ostream<charT> &o) const {
return (o << x);
}
int x = 5;
};

我想实现一个 operator<<对所有此类类执行一次函数:

template<typename charT, typename T>
std::basic_ostream<charT> &
operator<< (std::basic_ostream<charT> &o, const T &t) {
return t.dump(o);
}

问题是所有类型都被这个模板捕获,包括标准类型。有办法解决这个问题吗?

最佳答案

template <typename T, typename charT>
auto operator<< (std::basic_ostream<charT> & str, const T & t) -> decltype(t.dump(str))
{
static_assert(std::is_same
<decltype(t.dump(str)),
std::basic_ostream<charT> &>::value,
".dump(ostream&) does not return ostream& !");

return t.dump(str);
}

这会重载 operator<<仅适用于定义适当 dump 的类型成员(member)。

编辑:添加了 static_assert 以获得更好的消息。

关于c++ - operator<< 函数在转储成员函数方面的通用实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34178478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com