// buffer
#ifndef __Buffer_H__
#define __Buffer_H__
#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <map>
#include <set>
class CBuffer
{
public:
CBuffer()
{
}
~CBuffer()
{
}
template <class T>
CBuffer& operator<<(T &val)
{
std::cout << "11111" << std::endl;
return *this;
}
CBuffer& operator<<(std::string &val)
{
std::cout << "22222" << std::endl;
return *this;
}
template <class T>
CBuffer& operator<<(std::list<T> &val)
{
auto iter = val.begin();
while (iter != val.end())
{
*this << (*iter++);
}
return *this;
}
template <class T>
CBuffer& operator<<(std::deque<T> &val)
{
auto iter = val.begin();
while (iter != val.end())
{
*this << (*iter++);
}
return *this;
}
template <class T>
CBuffer& operator<<(std::vector<T> &val)
{
for (size_t i = 0; i < val.size(); ++i)
{
*this << val[i];
}
return *this;
}
template <class T>
CBuffer& operator<<(std::set<T> &val)
{
auto iter = val.begin();
while (iter != val.end())
{
// static_cast<T> 不加上这个无法正确重载,原因未知
*this << (*iter++);
}
return *this;
}
};
#endif
// main
#include <iostream>
#include "Buffer.h"
using namespace std;
int main()
{
CBuffer buf;
std::set<std::string> a1 = { "aaa"};
std::vector<std::string> a2 = { "aaa"};
std::list<std::string> a3 = { "aaa" };
std::deque<std::string> a4 = { "aaa" };
buf << a1 << a2 << a3 << a4;
system("pause");
return 0;
}
输出
11111
22222
22222
22222
set 的<<重载调用与其他 vector,list,deque 不同。 不解!!!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.