显示 std::list<type*>

displaying a std::list<type*>

我有一个小问题,因为我正在制作我的学校项目,我需要创建类似容器 正在使用 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];
}

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

cout << *something[0];

不会work.Thanks求助:)

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

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

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

然后,您将能够:

cout << *something[0];

(假设您有 operator<< 用于 A 超载)。

A 必须是 cout 上的 "displayable",因此您需要为 A 对象声明一个 operator<<

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

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

cout << *(something[0]);