包含整数序列的缓冲区是std::vector<int>
控制对象。
您可以覆盖全局运算符<<
以将任何类型附加到此类操作对其有意义的T
任何容器类型:C
#include <vector>
#include <iostream>
std::vector<int> & operator<<(std::vector<int> & vi, int i)
{
vi.push_back(i);
return vi;
}
int main()
{
std::vector<int> vi;
vi << 1 << 2 << 3;
for(auto i : vi) {
std::cout << i << std::endl;
}
return 0;
}
但是,如果您想要实现的只是一个缩写,例如
si.push_back(i);
对于一些整数序列si
和 int i
,并且能够缩短,例如
si.push_back(i);
si.push_back(j);
si.push_back(k);
至:
si << i << j << k;
请记住,您获得的简洁性是以使其他熟练的读者研究您的缩写是什么以及它们的安全性为代价的。
我建议缩短si.push_back(i)
到si << i
是不值得的,如果你想push_back(n)
在一行上得到令人厌烦的长序列,那么为此目的定义一个类型安全的可变参数函数模板就足够了,而且不那么古怪,例如
void push_back(std::vector<int> & vi){}
template<typename ...Ts>
void push_back(std::vector<int> & vi, int i, Ts... ts)
{
vi.push_back(i);
if (sizeof...(Ts)) {
push_back(vi,ts...);
}
}
你会用它来写,例如
push_back(si,i,j,k);
而不是:
si << i << j << k;