用定义替换std :: cout
Replace std::cout with a define
我试图强迫编译器用某些内容替换代码中的任何std::cout
。但是当我写这样的东西时:
#define std::cout (*some code*)
我的编译器吐在我的脸上。有办法这样做吗?
编辑:
这是代码段:
# define std::cout (std_out << std::cout)
(std_out是我以前打开的文件)
和带有std :: Out出现的线路上的错误
全局范围没有" cout"
您定义标识符,而不是任意表达式。std
是标识符;您的定义将导致编译器替换标识符std
的每个实例都带有::cout (*some
code*)
。因此,编译器不喜欢,毫不奇怪IT:std::cout << toto
变为::cout (*some code*)::cout <<
toto
,std::vector
变为::cout (*some code*)::vector
。
如果您要解释您实际要实现的目标,我们可能会更好地帮助您。
我试图强迫编译器用某些东西替换我的代码中的任何std :: cout事件
那是坏主意。如果您在输出流上寻找可配置的行为,请用out
在代码中替换std::cout
的所有出现,并将out
声明为std::ostream& out
(=您可能需要的任何流类型)。
我的编译器吐在我的脸上。有办法这样做吗?
不是这样。不。你可以写:
#define OUTPUT std::cout
OUTPUT << "a = " << a << std::endl;
但是您需要#Define来禁用(或重定向)您的输出流是不良设计的标志(即,您的定义不是您应该尝试解决的问题)。
您可以制作自己的Cout版本,实际上称为Cout,您可以在此处放置任何自定义代码:
std::ostream& my_cout() {
/// ...
return std::cout << "a custom message";
}
int main() {
my_cout() << " hi" << std::endl;
}
相关文章:
- std::cout.imbue()多重调用
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- std::cout输出int时出现编译错误
- 在这种情况下显式调用时,std::cout 如何更改析构函数的行为?
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 为什么我需要做'using namespace std'而不是"使用 std::cout"?
- main() 中的 std::cout 在调试期间不会在调试控制台中打印任何内容
- 错误:在尝试检测 std::cout 是否<< t 时,功能强制转换为数组类型;有效
- std::cout 来自多个线程
- 在 c++ 中以十六进制格式打印无符号字符(BYTE).使用 std::cout
- Cuda 基本程序 (将值写入矩阵和 std:cout 不起作用) ;主功能不启动
- 使用 std::addressof(std::cout) 而不是 &std::cout 是否有任何风险?
- 是否可以为 std::cout 创建别名?
- std::cout 在打印变量与函数表达式时的行为不同
- 带有 std::cout 的多线程控制台文本动画
- 为什么在语句"std::cout << std::endl;"中使用时需要命名空间限定,给定依赖于参数的查找?
- "std::cout << std::endl;"如何编译?
- std::cout/std::cerr seg faults