名称空间探测
namespace detection
我正在尝试编写一个日志库,它将使用外部工具
为了使库更自然地使用,我希望能够检测到使用cout的命名空间。
具体来说,结果应该像这样使用
namespace A
{
void foo()
{
cout << "Something went very wrong" << endl;
}
}
namespace B
{
void bar()
{
cout << "C should equal 3" << endl;
}
}
int main()
{
B::bar();
A::foo();
}
,结果输出应该如下所示
MODULE::B : C should equal 3
MODULE::A : Something went very wrong
我已经使用std::streambuf
将某些关键字添加到cout的输出,我所需要做的就是指定在哪个命名空间中使用哪个流buf。
我如何实现这一点?
我正在制作的库也将集成在一个具有多个名称空间的项目中,这使得大量使用using namespace
声明。我需要一个不需要删除这些声明的解决方案。
edit1:我不在乎必须手工指定哪个名称空间与哪个字符串相关联或将对象添加到任何使用的名称空间(当然std
除外)
如何创建您的自定义日志记录器流?这样,用户就可以指定失败的组件,如下所示:
namespace A {
void foo()
{
log("A") << "Something went very wrong" << endl;
}
}
namespace B {
void bar()
{
log("B") << "C should equal 3" << endl;
}
}
int main()
{
B::bar();
A::foo();
}
可能不太自动,但__FILE__
宏也可以提供一些信息。
这在该语言中是不可能的。如果您正在使用Clang,您可以重新编译Clang来为您执行这样的任务。
您可以尝试在每个要显示的名称空间中注入像std::string namespace_name()
这样的函数,然后调用std::cout << namespace_name()
将导致大多数内部名称空间名称输出
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- OpenGL相机和相机空间转型的困惑
- CUDA内核和数学函数的显式命名空间
- 打印第二列时的2d字符矢量打印空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- 是否可以将函数导入命名空间,但不能导出它?
- 名称空间探测