std :: get <n>只接受const表达式,如何绕过限制?

时间:2017-05-09 20:24:44

标签: c++ std c++17

我试图在c ++ 17(gcc7.1)

中模拟std :: visit函数
template<typename ... Ts>
void myvisit(variant<Ts...> v)
{

    size_t N = std::variant_size<decltype(v)>::value;
    for (int i=0;i<N;++i) //try to iterate variadic pack
    {
        using T = decltype(get<i>(v));
        if (holds_alternative<T>(v))
        {
            cout<< get<T>(v);
            break;
        }
    }
}

int main()
{
    using VAR = variant<int, string, double>;
    vector<VAR> vv;
    vv.push_back("app");
    vv.push_back(123);
    vv.push_back(1.02);
    for(auto v:vv)
        myvisit(v);

    return 0;
}

我在这里得到一个问题:

  

错误:'i'的值在常量表达式中不可用   使用T = decltype(得到&lt; i&gt;(v));

我想知道如何解决它?

0 个答案:

没有答案