2014-03-27 29 views
0

ostream_iterator具有指針

Foo.hpp:

class Foo 
{ 
    public: 
    void print() const; 
    protected: 
    vector<Bar<string, int>*> bar_; 
}; 

void Foo::print() const 
{ 
    copy(bar_.begin(), bar_.end(), ostream_iterator<Bar<string, int>*>(cout, "\n")); 
} 

Bar.hpp:

class Bar 
{ 
    public: 
    template <typename K, typename U> 
    friend ostream& operator<<(ostream&, const Bar<K, U>&); 
} 

template <typename Key, typename T> 
ostream& operator<<(ostream& out, const Bar<Key, T>& bar) 
{ 
    return out << "FOOBAR"; 
} 

哪裏bar_是富的屬性,是指針欄元素的向量。假設bar_有一個元素,則輸出:

Foo foo; 
foo.print(); 

是bar_中元素的地址,而不是「FOOBAR」。如果我不使用指針,輸出將是「FOOBAR」我想在這裏實現的是打印「FOOBAR」bar_的每個指針。

回答

1

嘗試添加:

template <typename Key, typename T> 
ostream& operator<<(ostream& out, Bar<Key, T>* bar) 
{ 
    return out << *bar; 
}