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