2020年02月06日(木) [長年日記]
■ [c++] C++17の畳み込み式(fold expression)
C++17から可変引数テンプレートに対して畳み込み式というのが使えることを知ったのでメモ。
以前に書いた可変引数テンプレートのコードを畳み込み式を使って書き直してみる。
#include <iostream>
#include <string>
// sからindexesで指定された位置の文字を繋いだ文字列を返す。
template<typename... Args>
auto select(const std::wstring& s, Args... indexes)
-> decltype(std::initializer_list<int>({indexes...}), std::wstring{})
{
using namespace std::literals::string_literals;
return (L""s + ... + s.at(indexes));
}
int main()
{
std::ios_base::sync_with_stdio(false);
std::wcout.imbue(std::locale(""));
std::wcout << select(L"パタトクカシーー", 1, 3, 5, 7) << std::endl;
}
非常に強力。
[ツッコミを入れる]