2012-08-05 31 views
2

考慮下面的C++代碼:鏈接操作符>>優於變量模板函數?

A a = ...; 
B b = ...; 
C c = ...; 

cin >> a >> b >> c; 
... 
cout << a << b << c; 

現在,我們有C++ 11個可變參數模板功能(我覺得)它可能已實施的下列方式之一:

cin.read(a,b,c); 
cout.write(a,b,c); 

read(cin,a,b,c); 
write(cout,a,b,c); 

cin(a,b,c); 
cout(a,b,c); 

是否有任何鏈接<<運營商在這些方面的優勢?換句話說 - 你認爲如果他們在開始時有可變模板函數,他們仍然會使用operator <<operator >>?如果是這樣,爲什麼?

+1

我喜歡'<<' and '>>',因爲它們不知何故使我想起_stream_ ... – moooeeeep 2012-08-05 22:43:26

回答

5

iostreams的一個最重要的方面是它是可擴展。你可以添加新的類型,你所需要做的就是提供一個超載的<<用於書寫,>>用於閱讀。

您需要爲您的可變參數版本提供類似的機制。

您將不得不提供一些全局或名稱空間範圍的函數名稱,該名稱將由參數依賴查找istream::readostream::write調用。這個函數的名字需要明確定義。但是根本不會在cin.read(a,b,c);中找到該函數的名稱。除非它是read,在這種情況下,您會遇到一些潛在的名稱衝突問題。

該機制不會立即明顯超載operator<<。您需要查看文檔以瞭解要寫入重載的函數的名稱,而operator<<在聲明中正確:cout << ...

+0

+1。超負荷潛力是這種方法的最重要的優勢。 – Puppy 2012-08-05 22:42:39

+2

難道你只是超載單參數版本?而可變的版本使用? – 2012-08-05 22:51:05

+0

你不能重載'cin(a);'。 – Puppy 2012-08-05 22:53:13