2017-09-27 39 views
0

上個月我正在學習很多C++,並且知道我在嘗試一些練習,爲此我克隆了Electron項目。重載cout來查看裏面的指針

在文件src/electron/atom/browser/api/atom_api_session.cc有這樣的代碼:

379 void Session::OnDownloadCreated(content::DownloadManager* manager,                  
    380         content::DownloadItem* item) {                   
    381 if (item->IsSavePackageDownload())                          
    382  return;                                
    383                                   
    384 v8::Locker locker(isolate());                           
    385 v8::HandleScope handle_scope(isolate());                        
    386 bool prevent_default = Emit(                           
    387  "will-download",                             
    388  DownloadItem::Create(isolate(), item),                        
    389  item->GetWebContents());                           
    390 if (prevent_default) {                             
    391  item->Cancel(true);                             
    392  item->Remove();                              
    393 }                                  
    394 } 

我想打印什麼是stdout::cout << manager;經理,所以我創建了一個功能超載<<的書告訴我:

375 void operator << (std::ostream & o, const content::DownloadManager* manager) {               
    376 o << "manager:" << manager;                            
    377 } 

但這根本不起作用。

+1

你應該返回一個流,找到一些例子。 – perreal

+0

「這根本不起作用」 - 它怎麼不起作用?會發生什麼,預期的輸出是什麼? – Jay

+0

@jay編譯器失敗 –

回答

0

content::DownloadManager*看起來像指向類實例的指針。簡單地做o << "manager:" << manager;將不會打印課程的內容。您必須知道content::DownloadManager的數據成員才能使用<<運算符重載打印它們。但是在更新之後,您必須登錄returnstd::ostream。例如,查看以下示例,以便重載運算符<<>>

struct Quote 
{ 
    std::string ticker; 
    std::string exchange; 
    std::string full_name; 
    double value; 
    std::string data; 
    long long timestampus; 
    long long timestamps; 

    friend std::ostream& operator<< (std::ostream& out, Quote& object) 
    { 
     out << object.ticker << " " << object.exchange << " " << object.full_name << " " << object.value << " " << object.data << " " << object.timestampus << " " << object.timestamps; 
     return out; 
    } 

    friend std::istream& operator>> (std::istream& in, Quote& object) 
    { 
     in >> object.ticker; 
     in >> object.exchange; 
     in >> object.full_name; 
     in >> object.value; 
     in >> object.data; 
     in >> object.timestampus; 
     in >> object.timestamps; 
     return in; 
    } 
}; 

也看看這個link瞭解您是否想定義爲成員或朋友或者非友。希望這可以幫助。

+0

謝謝!這是澄清。 –