我希望可以通过以下代码为 std::list
和 std::vector
重载 operator<<
,但是这两个函数几乎相同。有没有办法将它们组合起来,也就是创建更通用的重载函数?
#include <iterator>
#include <iostream>
#include <vector>
#include <list>
template <typename T>
std::ostream &operator<<(std::ostream &out, const std::vector<T> &v)
{
if (!v.empty())
std::copy(v.begin(), v.end(), std::ostream_iterator<T>(out, ", "));
return out;
}
template <typename T>
std::ostream &operator<<(std::ostream &out, const std::list<T> &v)
{
if (!v.empty())
std::copy(v.begin(), v.end(), std::ostream_iterator<T>(out, ", "));
return out;
}
int main()
{
std::cout << std::vector<int>({1, 2, 3, 4}) << std::endl;
std::cout << std::list<int>({1, 2, 3, 4}) << std::endl;
return 0;
}
operator<<
的语法是错误的。 - Rakete1111Range&& rng
这里的Range
概念是无效的。你需要使用template<Range T> std::ostream& operator<<(std::ostream&, T&& rng);
,因为你的约束类型是T
,而不是Range
。 - Rakete1111