[英]How do I retrieve a template parameter pack given a std::variant?
示例代碼
template<typename T = std::variant<int,double,float>>
void f()
{
}
是否有可能以某種方式檢索 std::variant 參數包作為可變參數模板參數(或其他方式)? 我需要得到一個我可以運行折疊表達式的類型列表,所以對於上面的例子,我需要一個類似類型名的東西typename... Args
帶有int,double,float
typename... Args
我可以運行折疊表達式,給定一個變體(這部分是必不可少的)。 另外我真的只需要包含類型的類型,而不是這些類型的具體對象。
如果您有這樣的功能:
template<class... Vs>
void foo( std::variant<Vs...> const& );
您可以將declval<T>()
傳遞給它以訪問模板參數:
template<typename T = std::variant<int,double,float>>
void f() {
using U = decltype(foo(std::declval<T&>()));
}
然后你可以用Vs...
做任何你想做的事情。
更新:現在我有更多信息,這是我的最新示例:
template<class T = std::variant<int,double,float>>
void f() {
print_alternative_types(T{});
}
template<class... Vs>
void print_alternative_types( std::variant<Vs...> const& ) {
(..., (std::cout << typeid(Vs).name() << '\n'));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.