可変引数を持つジェネリック ラムダを返す関数を作成しようとしています。ラムダは、引数の 1 つが特定の値と等しいことを確認します。これが(大まかに)私がやろうとしていることです:
template <int Index, typename TValue>
inline auto arg_eq(const TValue& value)
{
return [value] (auto... args) -> bool {
return (std::get<Index>(std::tuple</* ??? */>(args...)) == value);
};
}
std::tuple</* ??? */>
テンプレート引数に何を入れればよいかわかりません。decltype(args)
、decltype(args...)
、auto
、およびその他いくつかのことを試しましたがauto...
、コンパイラ エラーが発生し続けます。これは可能ですか?
非ジェネリックに相当するものは次のようになります。
template <int Index, typename TValue, typename... TArgs>
inline auto arg_eq(const TValue& value)
{
return [value] (TArgs... args) -> bool {
return (std::get<Index>(std::tuple<TArgs...>(args...)) == value);
};
}
これは問題なく動作しますが、返されるラムダは一般的ではありません。任意のパラメーター パックでは動作しません。