我尝试强制我的编译器用我的代码替换掉任何std::cout
。 但是,当我写类似的东西:在我的脸上用定义替换std :: cout
#define std::cout (*some code*)
我的编译器吐出。有没有办法做到这一点 ?
编辑:
这里是代码片段:
# define std::cout (std_out << std::cout)
(std_out是我以前打开的文件)
,并与一个std行错误: :出现
全球范围内没有“cout”
我尝试强制我的编译器用我的代码替换掉任何std::cout
。 但是,当我写类似的东西:在我的脸上用定义替换std :: cout
#define std::cout (*some code*)
我的编译器吐出。有没有办法做到这一点 ?
编辑:
这里是代码片段:
# define std::cout (std_out << std::cout)
(std_out是我以前打开的文件)
,并与一个std行错误: :出现
全球范围内没有“cout”
您定义了一个标识符,而不是一个任意的表达式。 std
是 的标识符;您的定义将导致编译器用标识std
替换 的每个实例,并使用::cout (*some code*)
。所以编译器不喜欢 it:std::cout << toto
变为::cout (*some code*)::cout << toto
而std::vector
变成::cout (*some code*)::vector
也就不足为奇了。
如果你想解释你实际想要达到的目标,我们可能会帮助你更好。
谢谢,现在更清楚了。编辑:我尝试在我的控制台中将文件中的所有输出都重新排版。 – PanzerKadaver
你可以使自己的COUT的版本,实际调用清点,你可以放置有任何自定义代码:
std::ostream& my_cout() {
/// ...
return std::cout << "a custom message";
}
int main() {
my_cout() << " hi" << std::endl;
}
我不能使用它,我被迫调用std :: cout。 – PanzerKadaver
这很奇怪。这是功课吗? – 2014-01-20 11:43:10
不是,我只是想知道如何做到这一点。 – PanzerKadaver
我试图迫使我的编译器来代替任何的std ::法院occurence在我的代码与东西
这是一个坏主意。如果您正在寻找输出流上的可配置行为,请将代码中出现的std::cout
替换为out
,并将out
替换为std::ostream& out
(=您可能需要的任何流类型)。
我的编译器吐在我的脸上。有没有办法做到这一点 ?
不这样。不可以,你可以这样写:
#define OUTPUT std::cout
OUTPUT << "a = " << a << std::endl;
,但你需要使用#define禁用(或重定向)的输出流是糟糕的设计标志(即你的定义是不是你应该尝试解决这个问题)。
要做什么?你还没有告诉我们你试图用什么替换它或者你得到了什么错误...... – Borgleader
也许搜索替换会是一个更好的主意。在需要恢复更改时,将每个出现的'std :: cout'替换为其他可轻松修改的内容以调用'std :: cout'。 –
也告诉我们它吐了什么? – legends2k