aaaa

C++ で繰り返し処理をするのって、面倒ですよね。わざわざ初期化式、ループ継続式、変化式を書く必要があります。
これらは IDE の力を借りる等、スニペットによってその手間はいくらかは省けますが、それでもめんどいし、見た目が良くないし...

C++ の N 回ループはこちらです。

for(int i = 0; i < N; i++) { // ただの回数繰り返しなのに見た目がうるさい
    hoge();
}

一方で Python では楽に書くことができます。見た目もよろしい。

for i in range(N): # rangeでスッキリ
    hoge()

本記事では、このようなスッキリとした繰り返しの表記にできるだけ近づけることを目的とします。
なお、C++14 以前は古代であるという考えを持っているので(C++14 は中世)、それ以前の規格は知りません。

完成形が見たい方は記事一番下までどうぞ

テンプレートにおけるパラメータパック

パラメータパックとは、テンプレートにおいて任意長の引数を詰めたものと考えられます。C で使われていた va_list の代わりです。以下ではその使用例を見ていきましょう。

テンプレートパックを用いた例

引数の数値を全て足し上げる sum 関数の実装例です。

#include <iostream>

template <typename T>
T sum(T first) {
    return first;
}
template <typename T, typename. Args>
T sum(T first, Args... others) {
    return first + sum(others...);
}

int main(){
    std::cout << sum(1, 2, 3, 4, 5); // 15
    return 0;
}
... ...