スポンサーリンク

C++、Fold expressionで可変引数テンプレート関数の引数を一括で計算する

C++17でFold expressionという機能が追加されたらしい。

なんでも

(pack op ...)

とすると、

(val1 op val2 op val3 op)

と展開される。

#include <iostream>

template<typename... Args>
auto add1(Args... val) {

    // Fold expression
    // val1 + val2 + val3 + ...

    return (val + ...); 
}

template<int... Args>
int add2() {

    // Fold expression
    // args1 + args2 + args3 + ...

    return (Args + ...);
}

int main()
{

    auto ret1 = add1(1.0, 2.2, 3.f, 4, 5);
    std::cout << "Sum: " << ret1 << "\n";

    int ret2 = add2<1, 2, 3, 4, 5>();
    std::cout << "Sum: " << ret2 << "\n";

}
Sum: 15.2
Sum: 15

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: