是否可以将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
答案 0 :(得分:8)
是的,它可以通过简单的折叠表达式来实现。
template<typename... Alts, typename... Ts>
constexpr bool holds_any_of(std::variant<Ts...> const& v) noexcept {
return (std::holds_alternative<Alts>(v) || ...);
}
答案 1 :(得分:5)
不,这不可能。但是您可以自己滚动:
template <class ...Request, class ...Types>
constexpr bool holdsAlternative(const std::variant<Types...>& v) noexcept
{
return (std::holds_alternative<Request>(v) || ...);
}
在尝试使用std::holds_alternative
时被调用:
bool r = holdsAlternative<bool, double>(var);