2014-01-20 155 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禁用(或重定向)的輸出流是糟糕的設計標誌(即你的定義是不是你應該嘗試解決這個問題)。