显示std :: list <type *>

时间:2015-12-24 10:18:04

标签: c++ stdlist

我有一点问题,因为我正在制作我的学校项目,我需要创建类似容器的东西,使用std :: list。

#include <iostream>
#include <list>

template<typename T>
class SomeContainer
{
    public:
        SomeContainer &operator[](size_t i) ;
        void push_back(const T &);
        std::list<T> someContent_;
}

class A
{
    //it doesn't matter whats inside
}

class B: public A
{}

class C: public A
{}

int main()
{
    SomeContainer <A*> something_;
    something_.push_back(new B);
    cout<< something [0];
}

我做了这样的事,有一个问题。如何显示A类内容,而不是指向它的指针?当我使用int或string类型时,一切正常,但即使我写

,也会使用<A*>
cout << *something[0];

它不起作用。谢谢你的帮助:))

2 个答案:

答案 0 :(得分:2)

您的operator[]必须有此签名:

T &operator[](size_t i);
T const& operator[](size_t i) const; // possibly const overload

您希望它返回对T类型的一个元素的引用,而不是容器。但是,您需要遍历std::list,而是使用std::vector进行随机访问。

然后,您将能够:

cout << *something[0];

(假设operator<<已超载A

答案 1 :(得分:1)

A必须在cout上“可显示”,因此您需要为operator<<个对象声明A

ostream& operator<<(ostream& os, const A& a)
{
     os << "a A object"; // send A attributes to os.
     return os;
}

此外,请确保将A对象发送到流,但不是指向它的指针。作为您的容器存储A*something[0]是指向AA*)的指针,因此您需要取消引用它:

cout << *(something[0]);