我嘗試強制我的編譯器用我的代碼替換掉任何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