我尝试强制我的编译器用某些东西替换代码中的任何std::cout
次出现。
但是当我写这样的东西时:
#define std::cout (*some code*)
我的编译器吐在我的脸上。有没有办法做到这一点?
编辑:
以下是代码段:
# define std::cout (std_out << std::cout)
(std_out是我之前打开的文件)
和带有std :: out occurence
的行上的错误全球范围没有“cout”
答案 0 :(得分:5)
您定义标识符,而不是任意表达式。 std
是
标识符;你的define会导致编译器被替换
标识符std
的每个实例都带有::cout (*some
code*)
。所以编译器不喜欢这并不奇怪
它:std::cout << toto
变为::cout (*some code*)::cout <<
toto
,std::vector
变为::cout (*some code*)::vector
。
如果你要解释你实际想要实现的目标,我们可能会帮助你做得更好。
答案 1 :(得分:0)
您可以创建自己的cout版本,实际上调用cout,您可以在那里放置任何自定义代码:
std::ostream& my_cout() {
/// ...
return std::cout << "a custom message";
}
int main() {
my_cout() << " hi" << std::endl;
}
答案 2 :(得分:0)
我尝试强制我的编译器用
替换代码中的任何std :: cout出现
这是一个坏主意。如果您要在输出流中查找可配置的行为,请将代码中std::cout
的所有匹配项替换为out
,并将out
声明为std::ostream& out
(=您输入的任何流类型可能需要)。
我的编译器吐在我的脸上。有没有办法做到这一点?
不是这样的。不,你可以写:
#define OUTPUT std::cout
OUTPUT << "a = " << a << std::endl;
但是你需要#define来禁用(或重定向)你的输出流是一个糟糕设计的标志(即你的定义不是你应该尝试解决的问题)。