gpt4 book ai didi

c++ - 私有(private)好友运营商<<

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:51:18 25 4
gpt4 key购买 nike

所以我有一个要重载的类 operator<<能够输出其内部数据输出流。我想这样做只是为了调试目的,因此以某种方式完全隐藏了 operator<<来自外面的世界,这样它只能从 *.cpp 中访问文件所在的我的类(class)的实现驻留。给operator<<访问成员(member)我类(class)的变量我必须让它成为它的 friend 。然而宣告 operator<<类的 friend 可以让外界的任何人打电话 operator<<在这门课上......

我知道我可以创建一个常规的私有(private)成员函数来执行此操作,但我已经有了一些使用 operator<< 的调试宏,所以我想知道是否有可能以某种方式完成这项工作。

最佳答案

您可以移动 operator<<辅助代理类的功能。当代理用作<<的RHS时, 然后打印原始对象。定义一个 private从原始到代理的隐式转换。现在任何人都可以访问 operator<< , 但只有类具有构造代理的能力。

Code:

class private_printable {
int state;

struct proxy {
private_printable const &r;
};
operator proxy () const { return { * this }; }

friend std::ostream & operator << ( std::ostream & s, proxy const & o )
{ return s << o.r.state; }

public:
private_printable() : state( 5 ) {}
void debug() { std::cout << * this << '\n'; }
};

请注意,代理不需要加为好友。与正常的做事方式唯一不同的是存在代理和转换功能。 friend operator<<由依赖于参数的查找找到,没有命名空间范围声明,即使它不需要 private_printable争论。然后转换使其可行。不要认为更清洁的解决方案是可能的 :v) 。

关于c++ - 私有(private)好友运营商<<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15648705/

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