C/C++的預編譯巨集做成程式碼模版使用
阿新 • • 發佈:2019-02-14
#define SHOW_VEC(_type,_vec,_it)\
vector<_type>::iterator _it = _vec.begin();\
while(_it!=_vec.end()){\
cout << *_it++ << endl;\
}
我們經常有時候會想要遍歷輸出一個容器裡面的每個元素,
一般來說我們通常想到的是函式模板泛型來實現不通類的容器的遍歷輸出,
但就算實現了該實現的部分,
有時候編譯器會出現奇怪的暫時解決不了的問題
那麼我們可以用巨集定義程式碼塊來先頂上一陣(不過這不是長久之計,為了程式的健康,請只在除錯中使用)
例如:
有了這個定義,我們就可以方便的輸出vec裡面的內容了,
為了避免迭代器重複定義,你還要把每個迭代器弄個不同的名字,
但是不要在巨集程式碼塊裡面隨便使用動態記憶體,記憶體洩漏什麼的最討厭了,
一般來說巨集程式碼塊裡面的任何動作都最好不要影響外面的世界,
你甚至還可以把vector也換成巨集引數,只要你確實瞭解你在幹什麼。
呼叫他:
vector<string> vi(4,"xx");
SHOW_VEC(string,vi,it);
vector<int> ve(4,5);
SHOW_VEC(int,ve,itf);
是不是比起宣告函式模板再實現它然後呼叫方便多了- -