显示std::list<键入*>

displaying a std::list<type*>

本文关键字:gt 键入 std 显示 lt list      更新时间:2023-10-16

我有一个小问题,因为我正在做我的学校项目,我需要创建一些类似容器witch使用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或字符串类型时,一切都很好,但使用<A*>,即使我写

cout << *something[0];

这行不通。感谢您的帮助:)

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

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

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

然后,您将能够:

cout << *something[0];

(假设Aoperator<<过载)。

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

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]);