显示std::list<键入*>
displaying a std::list<type*>
我有一个小问题,因为我正在做我的学校项目,我需要创建一些类似容器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];
(假设A
的operator<<
过载)。
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]
是指向A
(A*
)的指针,因此需要取消引用它:
cout << *(something[0]);
相关文章:
- 当用户键入分隔符时,停止getline()输入
- EASTL矢量<向量<int>>连续的
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 将转换字符键入 int 以用作向量C++的索引
- 如果模板参数是另一个模板的实例化,则键入特征测试
- C++在static_assert中键入
- C++使用默认模板参数键入别名和转发声明
- 如何公开库的枚举,以便我的代码不必键入整个命名空间来使用该枚举?
- C++20 个模块在 clang (Windows):在最简单的示例中键入信息错误
- 键入特定数量的字符
- 键入特征以接收 T::value_type(如果存在),否则键入 T
- C++方法实现:是否可以避免每次都键入类名?
- 通过键入的引用问题传递函数
- 下步指针键入用于shared_ptr的级别
- 键入特征以检查类型是否可从流和 MSVC 读取
- 有没有办法通过在C++中键入内容来停止正在进行的循环?
- 键入擦除成员函数指针的"right"方法是什么?
- QTreeView:如果未键入任何内容,则不要更新索引
- 在 C++11 中键入转发
- 如何执行此程序,将键入的数字显示为数字值的多次