gpt4 book ai didi

c++ - 隐藏其他运营商一段时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:15:15 24 4
gpt4 key购买 nike

阅读了名称查找规则,重载解析十几次后,我仍然感到困惑。

我不确定我问的是我真正应该问的,但无论如何。想象一下,我有一些像这样的第 3 方提供的功能:

namespace some_space {
template<typename Container>
void do_fancy_output(std::ostream& out, const Container& c) {
for (auto& el : c) { out << el; }
}
} // namespace

想象一下,这个函数附带了一组现成的运算符 <<重载(为清楚起见,让它们在 some_space 命名空间中定义)。除此之外,我还有自己的一组重载。

问题是:有没有办法为特定的 do_fancy_output() 打开和关闭具体的运算符重载?电话?实现该目标的一般架构指南是什么?

最佳答案

operator <<是一个像任何其他函数一样的函数。您不能在运行时动态更改函数实现。

你可以做的是:

使用不同的函数

// instead of:
out << el;

// do:
my_left_shift_operation_implementation(out, el);

或者,

做一个包装器

如果您真的喜欢使用 <<语法,自己写 class MyElement你用来包装 MyElement(el)然后在该类型上定义您的运算符。那么你将拥有:

out << my_el;

顺便说一句,如果您唯一想要的是覆盖运算符,我肯定会选择第一个解决方案。

根据一些外部因素选择实现

如果您想在一种行为和另一种行为之间切换,请在您的 my_left_shift_operation_implementation 中执行此操作.

您甚至可以制作例如一个Formatter可以重写以提供不同格式实现的类。然后你会做:

out << my_formatter.format(el);

关于c++ - 隐藏其他运营商一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34451503/

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