簡體   English   中英

如何檢索給定 std::variant 的模板參數包?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM