惰性计算和/或灵活的宏名称
Lazy evaluation and/or flexible macro names
本文关键字:计算 更新时间:2023-10-16
我有一个简单的单头日志记录库。我想将其"嵌入"到我编写的其他库中,以便用户可以有选择地为应用程序的不同部分打开日志记录。我不想添加任何依赖项,这就是为什么单头性质如此吸引人的原因。为了使同一日志记录库的不同副本不相互冲突,我可以将单个副本粘贴到目标库的命名空间中,隔离需要隔离的所有内容。这部分很简单。
但是,有一个问题。日志记录库有一个宏,LOG_SEV(severity)
实际上用于将消息粘贴到特定流中。宏的原因是我需要在某种if (logging conditions hold) ...
前面加上某种以确保对消息的惰性评估。
作为一个宏,它会污染全局命名空间,我至少会收到警告消息(可能还有冲突)。我想知道是否有解决这个问题的方法。要么是执行延迟求值的其他方法(在 C++03 中,而不是 C++11),要么是使用目标库名称扩充宏名称的某种方法,将LOG_SEV(severity)
变成LOG_SEV_mylib(severity)
。还是这是绝望的?
C++03(或更高版本)可以使用 boost::p roto 生成尚未计算的表达式对象。
他们的"hello world"示例(逐字,如下)与您描述的非常接近。
想象一下您在evaluate
函数中的日志记录条件。
#include <iostream>
#include <boost/proto/proto.hpp>
#include <boost/typeof/std/ostream.hpp>
using namespace boost;
proto::terminal< std::ostream & >::type cout_ = { std::cout };
template< typename Expr >
void evaluate( Expr const & expr )
{
proto::default_context ctx;
proto::eval(expr, ctx);
}
int main()
{
evaluate( cout_ << "hello" << ',' << " world" );
return 0;
}
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 计算缩放多边形的比例,得到给定的多边形面积
- 在C++中如何在没有pow的情况下进行基础计算
- 计算平均值,不包括上次得分
- 如何计算多映射中重复对的数量