std :: holds_alternative可变参数模板

Que*_*est 5 c++ c++17

是否可以将a包装std::holds_alternative到可变参数模板以将其用于更多类型?

例如:

std::variant<bool, int, double, std::string> var = 4;
bool r = std::holds_alternative<bool, double>(var); // holds either bool or double
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 8

是的,使用简单的折叠表达式即可。

template<typename... Alts, typename... Ts>
constexpr bool holds_any_of(std::variant<Ts...> const& v) noexcept {
    return (std::holds_alternative<Alts>(v) || ...);
}
Run Code Online (Sandbox Code Playgroud)


lub*_*bgr 5

不,这不可能。但是您可以自己滚动:

template <class ...Request, class ...Types>
constexpr bool holdsAlternative(const std::variant<Types...>& v) noexcept
{
   return (std::holds_alternative<Request>(v) || ...);
}
Run Code Online (Sandbox Code Playgroud)

在您尝试使用时被调用std::holds_alternative

bool r = holdsAlternative<bool, double>(var); 
Run Code Online (Sandbox Code Playgroud)