2014-01-20 64 views
-3

我尝试强制我的编译器用我的代码替换掉任何std::cout。 但是,当我写类似的东西:在我的脸上用定义替换std :: cout

#define std::cout (*some code*)

我的编译器吐出。有没有办法做到这一点 ?

编辑:

这里是代码片段:

# define std::cout (std_out << std::cout)

(std_out是我以前打开的文件)

,并与一个std行错误: :出现

全球范围内没有“cout”

+1

要做什么?你还没有告诉我们你试图用什么替换它或者你得到了什么错误...... – Borgleader

+1

也许搜索替换会是一个更好的主意。在需要恢复更改时,将每个出现的'std :: cout'替换为其他可轻松修改的内容以调用'std :: cout'。 –

+0

也告诉我们它吐了什么? – legends2k

回答

5

您定义了一个标识符,而不是一个任意的表达式。 std是 的标识符;您的定义将导致编译器用标识std替换 的每个实例,并使用::cout (*some code*)。所以编译器不喜欢 it:std::cout << toto变为::cout (*some code*)::cout << totostd::vector变成::cout (*some code*)::vector也就不足为奇了。

如果你想解释你实际想要达到的目标,我们可能会帮助你更好。

+0

谢谢,现在更清楚了。编辑:我尝试在我的控制台中将文件中的所有输出都重新排版。 – PanzerKadaver

0

你可以使自己的COUT的版本,实际调用清点,你可以放置有任何自定义代码:

std::ostream& my_cout() { 
    /// ... 
    return std::cout << "a custom message"; 
} 

int main() { 
    my_cout() << " hi" << std::endl; 
} 
+0

我不能使用它,我被迫调用std :: cout。 – PanzerKadaver

+0

这很奇怪。这是功课吗? – 2014-01-20 11:43:10

+0

不是,我只是想知道如何做到这一点。 – PanzerKadaver

0

我试图迫使我的编译器来代替任何的std ::法院occurence在我的代码与东西

这是一个坏主意。如果您正在寻找输出流上的可配置行为,请将代码中出现的std::cout替换为out,并将out替换为std::ostream& out(=您可能需要的任何流类型)。

我的编译器吐在我的脸上。有没有办法做到这一点 ?

不这样。不可以,你可以这样写:

#define OUTPUT std::cout 

OUTPUT << "a = " << a << std::endl; 

,但你需要使用#define禁用(或重定向)的输出流是糟糕的设计标志(即你的定义是不是你应该尝试解决这个问题)。