是否可以将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)
是的,使用简单的折叠表达式即可。
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)
不,这不可能。但是您可以自己滚动:
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)
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |