gpt4 book ai didi

c++ - 我如何以通用方式打印任何容器的内容?

转载 作者:可可西里 更新时间:2023-11-01 16:29:29 26 4
gpt4 key购买 nike

我正在尝试使用 C++ 模板编写一段有趣的代码。

#include <iostream>
#include <vector>

template <class Container>
std::ostream& operator<<(std::ostream& o, const Container& container)
{
typename Container::const_iterator beg = container.begin();

o << "["; // 1

while(beg != container.end())
{
o << " " << *beg++; // 2
}

o << " ]"; // 3

return o;
}

int main()
{
std::vector<int> list;

list.push_back(0);
list.push_back(0);

std::cout << list;

return 0;
}

上面的代码无法编译:)

在 1、2、3 处产生相同的错误:error C2593: 'operator <<' is ambiguous

我想做的就是重载 << 运算符以处理任何容器。那有意义吗 ?如果可能,那将如何完成,如果不能,为什么?

编辑::感谢更正 :) 'sth' 方式是一个很好的解决方案。

我很好奇,如果我们可以使用 C++0x 概念,这种歧义是否会消失?正如 Neil 所解释的那样?

最佳答案

您可以通过指定 Container 模板参数本身是模板化的来限制您的 operator<< 仅适用于模板化容器。由于 C++ std 容器也有一个分配器模板参数,因此您还必须将其作为容器的模板参数包含在内。

template
< typename T
, template<typename ELEM, typename ALLOC=std::allocator<ELEM> > class Container
>
std::ostream& operator<< (std::ostream& o, const Container<T>& container)
{
typename Container<T>::const_iterator beg = container.begin();

o << "["; // 1

while(beg != container.end())
{
o << " " << *beg++; // 2
}

o << " ]"; // 3

return o;
}

int main()
{
std::vector<int> list;

list.push_back(0);
list.push_back(0);

std::cout << list;

return 0;
}

关于c++ - 我如何以通用方式打印任何容器的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1154212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com