用定义替换std :: cout

Replace std::cout with a define

本文关键字:cout std 替换 定义      更新时间:2023-10-16

我试图强迫编译器用某些内容替换代码中的任何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 << totostd::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;
}