从boost :: variant获取索引项,就像使用std :: variant一样

onq*_*tam 5 c++ boost variant boost-variant

随着std::variant<int, bool>我可以调用std::get<0>(var)的变种来获取值,因为它是第一种类型- int.

我怎么能这样做boost::variantboost::get<>似乎只支持按类型而不是索引获取,我发现文档很难理解.

Bau*_*gen 6

这似乎不包括在提升中.

但是,在这个答案的帮助下,我们可以简单地扮演自己的角色:

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);
}
Run Code Online (Sandbox Code Playgroud)

现场观看.

如果需要,当然可以类似地添加指针过载.