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; }
非常に強力。