gpt4 book ai didi

c++ - 使用 ostream C++ 运算符进行延迟评估

转载 作者:可可西里 更新时间:2023-11-01 17:35:53 28 4
gpt4 key购买 nike

我正在寻找一种可移植的方法来在 C++ 中为日志类实现惰性求值。假设我有一个简单的日志记录功能,例如

void syslog(int priority, const char *format, ...);

然后在 syslog() 函数中我们可以做:

if (priority < current_priority)
return;

所以我们实际上从未调用格式化函数 (sprintf)。另一方面,如果我们像这样使用日志流

log << LOG_NOTICE << "test " << 123;

总是执行所有的格式化,这可能会花费很多时间。是否有可能以在检查日志记录级别后执行格式化的方式实际使用 ostream 的所有优点(如类的自定义 << 运算符、类型安全、优雅的语法...)?

最佳答案

这看起来像是可以用表达式模板处理的事情。但是请注意,表达式模板的实现绝对不是一件容易的事。

关于它们如何工作的一般想法是,运算符只是构建一个临时对象,然后您将该临时对象传递给您的日志记录对象。日志记录对象将查看日志记录级别并决定是执行临时对象中包含的操作,还是丢弃它。

关于c++ - 使用 ostream C++ 运算符进行延迟评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5035840/

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