With std::variant<int, bool>
I can call std::get<0>(var)
to get the value in the variant as it's first type - int
.
How can I do this with boost::variant
? boost::get<>
seems to support only getting by type and not by index and I find the documentation very difficult to understand.
This appears to be not included in boost.
However, with the help of this answer, we can simply role our own:
template<int N, typename... Ts> using NthTypeOf =
typename std::tuple_element<N, std::tuple<Ts...>>::type;
template<int N, typename... Ts>
auto &get(boost::variant<Ts...> &v) {
using target = NthTypeOf<N, Ts...>;
return boost::get<target>(v);
}
template<int N, typename... Ts>
auto &get(const boost::variant<Ts...> &v) {
using target = NthTypeOf<N, Ts...>;
return boost::get<target>(v);
}
int main () {
boost::variant<int, double> v = 3.2;
std::cout << get<1>(v);
}
See it live.
The pointer overloads can of course be added analogously if desired.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With