当前位置:  开发笔记 > 编程语言 > 正文

根据转储成员函数的operator <<函数的通用实现

如何解决《根据转储成员函数的operator<<函数的通用实现》经验,为你挑选了1个好方法。

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

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

我想operator<<为所有这样的类实现一次函数:

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

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



1> n. 'pronouns..:
template 
auto 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以获得更好的消息.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有