一連の整数を含むバッファがstd::vector<int>
制御します。
グローバル演算子をオーバーライドして、そのような操作が意味のある任意のコンテナ タイプに<<任意のタイプを追加できます。TC
#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と intiの場合、たとえば短縮できるようにする
si.push_back(i);
si.push_back(j);
si.push_back(k);
に:
si << i << j << k;
あなたが得た簡潔さは、それ以外の熟練した読者にあなたの略語が何であるか、そしてそれらがどれほど安全であるかを研究させるという犠牲を払っていることを覚えておいてください.
に短縮si.push_back(i)することsi << iは価値がなく、1 行に の非常に長いシーケンスを取得したい場合は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;