[英]How to get types from variadic parameter pack in generic lambda?
我正在嘗試編寫一個函數,該函數將返回帶有可變參數的泛型lambda ,其中lambda檢查其中一個參數是否等於特定值。 這是(大致)我正在嘗試做的事情:
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</* ??? */>
放什么std::tuple</* ??? */>
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);
};
}
這工作正常,但返回的lambda不是通用的 - 它不適用於任何任意參數包。
您可以通過簡單地使用std :: make_tuple來避免提及類型:
template <int Index, typename TValue>
auto arg_eq(const TValue& value)
{
return [value] (auto... args) -> bool {
return (std::get<Index>(std::make_tuple(args...)) == value);
};
}
我不確定在std :: tuple模板參數中放什么。 我已經嘗試過decltype(args),decltype(args ...),auto,auto ......等等,但我一直遇到編譯器錯誤。
試試吧
std::tuple<decltype(args)...>
功能齊全
template <int Index, typename TValue>
inline auto arg_eq(const TValue& value)
{
return [value] (auto... args) -> bool {
return (std::get<Index>(std::tuple<decltype(args)...>(args...))
== value);
};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.